一尘不染

Java随附的JAX-WS实现?

tomcat

我有一个JAX-WS Web服务应用程序,它作为Tomcat 7的WAR文件部署。它使用了Metro库的最新版本,该版本包含在WAR文件中,并且运行良好。

我正在尝试简化部署程序包。据我所知,太阳JDK包括地铁的复印件(请参阅这个问题这个为例),但出于某种原因,这显然是强制性的,同时一个从GlassFish网站下载,以取代地铁的这个副本。我试图了解是否可以仅使用Tomcat和JDK随附的Metro实现,否则,为什么不这样做。

WAR内容如下(删除了类文件):

META-INF/MANIFEST.MF
WEB-INF/classes/
WEB-INF/classes/com/[et cetera]
WEB-INF/ibm-web-ext.xml
WEB-INF/lib/
WEB-INF/lib/stax-api.jar
WEB-INF/lib/webservices-api.jar
WEB-INF/lib/webservices-extra-api.jar
WEB-INF/lib/webservices-extra.jar
WEB-INF/lib/webservices-rt.jar
WEB-INF/lib/webservices-tools.jar
WEB-INF/sun-jaxws.xml
WEB-INF/web.xml
wsdl/
wsdl/MyService.wsdl

web.xml 部分包含:

<servlet>
    <servlet-name>MyService</servlet-name>
    <servlet-class>
        com.sun.xml.ws.transport.http.servlet.WSServlet
    </servlet-class>              
</servlet>

当我从WAR中删除webservices- * jars-Metro jars时,Web服务失败,并显示错误“
Wrapper无法找到servlet类com.sun.xml.ws.transport.http.servlet.WSServlet或一个类这取决于”。这并不奇怪,因为我无法在Java
7 SE随附的jar中的任何地方找到该类。

那么,如果您必须下载另一份Metro副本才能进行此工作,那么说Metro 7附带Java
7意味着什么?是否可以仅使用Java附带的jar在Tomcat中运行JAX-WS Web服务?


阅读 289

收藏
2020-06-16

共1个答案

一尘不染

捆绑的JAX-WS缺少与Servlet容器的集成,因为它 用于在独立Java应用程序(WTF!?!?!?)中提供JAX-WS服务。

当然,人们可能会想到实现这种集成的servlet,因此您不必在WAR中包括Metro的另一个副本。但是,仅包含一个外部“完整”副本会更容易,它会使WAR显得but肿,但不应该对性能造成很大的影响。此外,通过这种方式,您可以控制使用的版本,避免卡在JRE中包含的版本中。

无论如何,Sun通常都会更改捆绑库中的软件包名称,以免它们与外部库冲突。因此,如果该servlet存在(不存在),则可能被称为:

com.sun.xml。 内部。 ws.transport.http.servlet.WSServlet

这非常令人讨厌,因为它们还以相同的方式更改了一些配置属性(例如,与超时相关的属性),因此,如果使用捆绑的JAX-WS,则必须使用

com.sun.xml。 内部。…样式配置属性,

但是,如果您使用一些外部JAX-WS,则必须使用

com.sun.xml ....样式配置属性。

谢谢太阳!

2020-06-16