JDK6:何时将捆绑的JAX-WS实现与Project Metro一起使用

问题描述 投票:5回答:2

与JDK6捆绑在一起的JAX-WS实现可用于提供Web服务服务器,而无需任何其他库。 JVM将以指定端口上的WS服务器启动。

https://www.oracle.com/technical-resources/articles/javase/jax-ws-2.html

http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2_pt2/

我的问题是,这与Metro项目有什么不同?如果最终目标是在tomcat中托管Web服务,那么我是否仍可以使用捆绑功能,然后直接重定向到此捆绑的ws服务器,还是部署Metro servlet更好?

tomcat jax-ws java-metro-framework jdk6
2个回答
1
投票

据我所知,JAX-WS只是一个template,必须由JDK6或Metro实现来实现。

Metro只是Glassfish Application Server附带的标准实现。 See here

因此应该没有任何区别。


16
投票

嗯,关于Metro,您必须了解的第一件事是,它是与WS相关的各种项目的总体项目。 JAX-WS,JAXB,WSIT,JAX-WS-Commons等。

每个组件都有两个部分,API(规范)和称为参考实现(RI)的实现部分。规范在“ javax.xml.ws”,“ javax.xml.bind”等中定义,RI在“ com.sun.xxx”包中。

现在,在JDK 6更新4的某个地方,sun / oracle开始将这些API + RI捆绑到自己的JDK中,并通过对JDK的更新不断更新。

截至上一次JDK 6更新31,JDK包含以下JAXWS,JAXB API和RI版本:>

JDK6 u31-JAXB API @ 2.1和RI @ 2.1.10,JAXWS API @ 2.1和RI @ 2.1.6

[现在,如果您转到http://jaxb.java.nethttp://jax-ws.java.net页面,并查看2.1.x下的最新发行版,您将看到JAXB RI位于2.1.13,JAXWS RI为2.1.7,即RI实现与最新JDK 6更新捆绑在一起的2.1 spces中,有2个版本落后于Metro下发布的版本。因此,要使用最新的2.1罐子,只需将API + RI罐子复制到您的类路径,如此处http://jax-ws.java.net/2.1.7/docs/ReleaseNotes.html#Running_on_top_of_JDK_6所述。

[为了使事情更加混乱,Metro伞项目具有其自己的版本号,到今天为止是1.5、2.0、2.0.1、2.1、2.1.1、2.2]

Metro 1.5是将2.1 spces和最新RI捆绑在一起的最新版本,即Metro 1.5包含@ 2.1的JAXWS和JAXB API以及@ 2.1.7的JAXWS RI和2.1.13的JAXB RI。

Metro 2.0及更高版本,将JAXB和JAXWS API v2.2和最新的RI捆绑在一起作为发行数据。例如最新的METRO 2.2版捆绑了JAXB RI 2.2.5和JAXWS RI 2.2.6。

但是有一个问题,JDK 6捆绑了用于JAXWS和JAXB(API + RI)的v2.1,如果仅使用JAXWS,则在类路径中使用JAXB v2.2 jar将无法正常工作。您必须使用认可的jar机制,如此处http://jax-ws.java.net/2.2.3/docs/ReleaseNotes.html#Running_on_top_of_JDK_6所述。

因此,对于任何Metro 2.0及更高版本,您需要将$ JAVA_HOME / jre / lib / endorsed下的jax-ws-api.jar和jaxb-api.jar文件复制,或使用-Djava.endorsed。 dirs系统属性。

还有一些有趣的事情,Metro并不是一个包含jax-ws,jaxb项目(以及其他项目)的保护伞项目,但它也使这些项目成为了一个超级jar。

因此,例如Metro的webservices-api.jar包含jaxws-api.jar,jaxb-api.jar(RI)+其他子项目(例如WSIT,jax-ws-commons等)的API

并且webservices-rt.jar包含jaxws-rt.jar,jaxb-rt.jar和其他子项目的RT jar,例如WSIT,jax-ws-commons等。

所以总结-

如果要根据JAXWS / JAXB v2.1规范开发WS,只需使用JDK 6(u04之后的任何更新)。如果要绝对确保使用2.1规范的最新API + RI版本,只需使用jaxws和jaxb中最新的2.1.x版本jar。例如,在类路径中使用jax-ws 2.1.7和jaxb 2.1.13 [或者,您也可以使用Metro 1.5的webservices-api.jar和webservices-rt.jar,因为它们将jaxws / jaxb / wsit /捆绑在一起。 。]

如果要根据最新的JAXWS / JAXB v2.2规范开发WS,则必须使用jax-ws v2.2.6和jaxb ver 2.2.5 jar [或者使用Metro 2.2的webservices- api.jar和webservices-rt.jar,因为它们捆绑了jaxws / jaxb / wsit。但是,您必须使用如上所述的认可jar机制,以覆盖jdk / jaxb v2.1 jar中包含的jdk。

我的建议-如果v2.1可以,请使用Metro 1.5罐(webservices-api,webservices-rt)。如果需要v2.2,请使用Metro 2.2 jar(webservices-api,webservices-rt),并确保将webservices-api.jar放入认可的目录中。

如果要使用fastinfosets,Mtom等之类的东西作为JDK捆绑的jar,则需要Metro jar(webservices- [api,rt] .jar),或者只是jaxws-ri.jar和jaxb-ri.jar不会为您提供这些功能。

希望这段较长的邮件有助于清理某些内容。

© www.soinside.com 2019 - 2024. All rights reserved.