K F*_*K F 5 tomcat java-metro-framework jax-ws jdk6
与JDK6捆绑在一起的JAX-WS实现可用于提供Web服务服务器,而无需任何其他库.JVM将从指定端口上的WS服务器开始.
http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/
http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2_pt2/
我的问题是,这与Metro项目有何不同?如果最终目标是在tomcat中托管Web服务,那么我是否仍然可以使用捆绑功能然后重定向到这个捆绑的ws服务器,还是更好地部署metro servlet?
小智 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开始在JDK中自己捆绑这些API + RI,并通过更新JDK来不断更新它们.
从最后一个JDK 6 update31开始,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.net和http://jax-ws.java.net页面,并查看2.1.x下的最新版本,您将看到JAXB RI位于2.1.13和JAXWS RI是2.1.7,即与最新的JDK 6更新捆绑在一起的2.1 spces的RI实现是在Metro下发布的版本之后的两个版本.因此,要使用最新的2.1罐,只需将API + RI jar复制到类路径,如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包含JAXWS和JAXB API @ 2.1和JAXWS RI @ 2.1.7以及JAXB RI @ 2.1.13.
从Metro 2.0开始,捆绑JAXB和JAXWS API v2.2以及发布数据中的最新RI.例如最新的METRO 2.2版捆绑JAXB RI 2.2.5和JAXWS RI 2.2.6.
但是有一个问题,JDK 6捆绑v2.1用于JAXWS和JAXB(API + RI),如果你只是使用JAXWS,JAXB v2.2 jars在你的类路径中它将无法工作.你必须使用背书的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项目(其他)的伞形项目,但它也使这些项目成为一个超级罐子.
例如,metro的webservices-api.jar包含来自其他子项目的jaxws-api.jar,jaxb-api.jar(RI)+ API,如WSIT,jax-ws-commons等.
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 jars [或者使用Metro 2.2的webservices-api. jar和webservices-rt.jar,因为它们捆绑了jaxws/jaxb/wsit ..]但是你必须使用如上所述的endorsed jar机制,以便覆盖jdk包含的jaxws/jaxb v2.1 jar.
我的建议 - 如果你使用Metro 1.5罐(webservices-api,webservices-rt)你可以使用v2.1.如果你需要v2.2使用Metro 2.2 jars(webservices-api,webservices-rt),并确保将webservices-api.jar放在背书目录中.
你需要使用地铁罐(webservices- [api,rt] .jar),如果你要使用像fastinfosets,Mtom等东西作为JDK捆绑的罐子,或者仅仅是jaxws-ri.jar和jaxb- ri.jar不会给你这些功能.
希望这个相当长的邮件有助于清理一些事情.
| 归档时间: |
|
| 查看次数: |
6676 次 |
| 最近记录: |