使用捆绑在 JDK 6 中的 jax-ws 参考实现构建 Web 服务

Build web service with jax-ws reference implemetation bundled in JDK 6

我以前看过 tutorial 关于这个话题。但是当我尝试按照示例制作我的示例应用程序时。我在类路径中找不到 com.sun.xml.ws.transport.http.servlet.WSServletContextListener。 但我发现 com.sun.xml.internal.ws.transport.http.servlet.WSServletContextListener 我很困惑,为什么 Oracle 将 com.sun.xml.xxx 中的那些 类 移动到 com.sun.xml.internal?我正在使用 JDK1.6.0_45。我看到有人说,形成 JDK6U4,jax-ws 参考实现捆绑在 JDK 中,所以我们应该能够通过 运行 轻量级 http 服务器发布 web 服务使用 JDK 并且不需要其他依赖项,是吗?您应该注意到,在我上面提到的教程中,仍然需要额外的依赖项,请参阅步骤 5“JAX-WS 依赖项”。

而且我还发现在IBMJDK里面连com.sun.xml.internal.ws.transport.http.servlet.WSServletContextListener都找不到

如果您检查 (non-internal) WSServletContextListener 的 grepcode,它会显示 class 是随 jaxws-rt/webservice-rt jar 一起提供的。

通过查找 internal WSServletContextListener,您找不到运送它的罐子。 (但 grepcode 还包含 openJDK 的源代码)

此外,我试图在本地 jdk7 中查找 WSServletContextListener,但找不到。但也许某些第三方 jdk 附带了 class。

无论如何,如果您再次查看教程,您会发现 jaxws-rt.jar 是应用程序所必需的。也许你应该添加它?

是的,自 Jdk6 以来,JAX-WS RI(与 JAX-B RI 相同)随 JDK 一起提供。除了 javax.xml.* 之外的所有包都更改为 .internal. 以避免 JDK 和独立 JAX-WS 版本之间的冲突。

使用JDK的版本,您可以仅使用JDK部署网络服务;如果你想在 tomcat 或某些 AS 中部署 WS,你仍然需要 JAX-WS 独立版本。