我有一个 JAX-WS Web 服务应用程序,它部署为 Tomcat 7 的 WAR 文件。它使用了最新版本的 Metro 库,我将其包含在 WAR 文件中,并且运行良好。
我正在尝试简化部署包。我知道 Sun JDK 包含 Metro 的副本(例如,请参阅这个问题和这个),但由于某种原因,显然必须用从 glassfish 站点下载的一个替换这个 Metro 副本。我试图了解是否可以仅使用 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 cannot find servlet class com.sun.xml.ws.transport.http.servlet.WSServlet or a class这取决于”。这并不奇怪,因为我在 Java 7 SE 附带的 jar 中的任何地方都找不到该类。
那么,如果您必须下载另一个 Metro 副本才能使类似的东西工作,那么说 Java 7 附带 Metro 意味着什么?是否可以仅使用 Java 附带的 jar 在 Tomcat 中运行 JAX-WS Web 服务?