gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:47:30 24 4
gpt4 key购买 nike

与 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 更好?

最佳答案

好,
关于 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 的更新不断更新这些 API。

截至上次 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.nethttp://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 jar,只需将 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 APIs 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 系统属性(property)。

更有趣的是,Metro 并不是一个包含 jax-ws、jaxb 项目(以及其他项目)的伞形项目,但它也从这些项目中制作了一个 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 jars。

所以总结一下——

如果您想根据 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..]
但是您必须使用如上所述的背书 jar 机制,以覆盖 jdk 包含的 jaxws/jaxb v2.1 jar。

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

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

希望这封相当长的邮件有助于清理一些事情。

关于tomcat - JDK6:何时使用捆绑的 JAX-WS 实现与 Project Metro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com