Tomcat JDK6:何时使用捆绑JAX-WS实现与Project Metro

Tomcat JDK6:何时使用捆绑JAX-WS实现与Project Metro,tomcat,jax-ws,java-metro-framework,jdk6,Tomcat,Jax Ws,Java Metro Framework,Jdk6,与JDK6捆绑的JAX-WS实现可用于提供web服务服务器,而无需任何附加库。JVM将从指定端口上的WS-server启动 我的问题是,这与地铁项目有何不同?如果最终目标是在tomcat内托管web服务,那么我仍然可以使用捆绑的功能,然后重定向到此捆绑的ws-server,还是部署metro servlet更好 据我所知,JAX-WS只是一个必须由JDK6或Metro实现的模板 Metro只是Glassfish应用服务器附带的标准实现 因此不应该有任何区别。嗯, 关于Metro,您必须知道的

与JDK6捆绑的JAX-WS实现可用于提供web服务服务器,而无需任何附加库。JVM将从指定端口上的WS-server启动


我的问题是,这与地铁项目有何不同?如果最终目标是在tomcat内托管web服务,那么我仍然可以使用捆绑的功能,然后重定向到此捆绑的ws-server,还是部署metro servlet更好

据我所知,JAX-WS只是一个必须由JDK6或Metro实现的模板

Metro只是Glassfish应用服务器附带的标准实现

因此不应该有任何区别。

嗯, 关于Metro,您必须知道的第一件事是,它是各种WS相关项目的总括项目,即。JAX-WS、JAXB、WSIT、JAX-WS-Commons等

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

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

截至上一次JDK 6更新31,JDK包含以下JAXWS和JAXB API的验证,以及RI

jdk6u31-jaxbapi@2.1&RI@2.1.10、JAXWS-API@2.1和RI@2.1.6

现在,如果您转到和页面,并查看2.1.x下的最新版本,您将看到JAXB RI位于2.1.13,JAXWS RI位于2.1.7,也就是说,与最新JDK 6更新捆绑在一起的2.1 SPCE的RI实现在Metro下发布的版本之后有两个版本。 因此,要使用最新的2.1 JAR,只需将API+RI JAR复制到您的类路径,如下所述

更让人困惑的是,Metro的伞式项目有自己的版本号,从今天开始,分别是1.5、2.0、2.0.1、2.1、2.1.1、2.2

Metro 1.5是捆绑2.1 SPCE和该规范的最新RIs的最后一个版本,即Metro 1.5包含JAXWS和JAXB API@2.1、JAXWS RI@2.1.7和JAXB RI@2.1.13

Metro 2.0之后,捆绑了JAXB和JAXWS API v2.2,以及截至发布数据的最新RI。 e、 g.最新的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机制,如下所述

因此,对于任何Metro 2.0及以上版本,您都需要将jax-ws-api.jar和jaxb-api.jar文件复制到$JAVA_HOME/jre/lib/annocated下,或者使用-Djava.annocated.dirs系统属性

更有趣的是,Metro不仅仅是一个包含jax ws、jaxb项目(amongs other)的伞形项目,它还利用这些项目制作了一个uber 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以及WSIT、jax-ws-commons等其他子项目的+rt-jar

总而言之-

如果您想根据JAXWS/JAXB v2.1规范开发WS,只需使用JDK 6(任何超过u04的更新)。 如果您想绝对确保使用2.1规范的最新API+RIs版本,只需使用jaxws和jaxb的最后2.1.x版本JAR即可。i、 e.在类路径中使用jax ws 2.1.7和jaxb 2.1.13,[或者在绑定jaxws/jaxb/wsit/时,可以使用Metro 1.5的webservices-api.jar和webservices-rt.jar。]

如果您想根据最新的JAXWS/JAXB v2.2规范开发WS,那么您必须使用jax WS v2.2.6和JAXB ver 2.2.5 jars[或者在绑定JAXWS/JAXB/wsit时使用Metro 2.2的webservices-api.jar和webservices-rt.jar] 但是您必须使用如上所述的认可jar机制,以便覆盖jdk包含的jaxws/jaxb v2.1 jar

我的建议-如果v2.1适合您,请使用Metro 1.5 jars(webservices api,webservices rt)。 如果需要v2.2,请使用Metro 2.2 jar(webservices api、webservices rt),并确保将webservices-api.jar放在已认可的目录中

如果要将FastInfo集、Mtom等东西用作JDK捆绑jar,或者仅jaxws-ri.jar和jaxb-ri.jar不能提供这些特性,那么需要metro jar(webservices-[api,rt].jar)


希望这封相当长的邮件有助于澄清一些问题。

这意味着唯一的区别在于web服务的部署方式:JDK6中的独立内置服务器,然后从tomcat重定向到project metro附带的servlet。我看不出使用独立服务器有任何限制,是吗?没有,没有部署,但已调用。来自JDK或Metro实现。两者都是标准实现,schould可以很好地工作。一个快速的谷歌搜索显示Metro在JDK之上使用了一个“更新和增强的”API。看见Cheers在哪里可以找到哪个JAXB版本与某个JDK捆绑在一起?