我有一个JAX-WS Web服务应用程序,它作为Tomcat 7的WAR文件进行部署.它使用最新版本的Metro库,我将其包含在WAR文件中,并且工作正常.
我正在尝试简化部署包.据我所知,太阳JDK包括地铁的复印件(请参阅这个问题和这个为例),但出于某种原因,这显然是强制性的,同时一个从GlassFish网站下载,以取代地铁的这个副本.我试图了解是否有可能只使用Tomcat和JDK附带的城域网实现,或者如果不是为什么不这样做.
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
Run Code Online (Sandbox Code Playgroud)
web.xml 包含,部分:
<servlet>
<servlet-name>MyService</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
</servlet>
Run Code Online (Sandbox Code Playgroud)
当我从WAR中删除webservices-*jars(Metro jar)时,Web服务失败并显示错误"Wrapper找不到servlet类com.sun.xml.ws.transport.http.servlet.WSServlet或类这取决于".这并不奇怪,因为我无法在Java 7 SE附带的罐子里找到该类.
那么,如果你必须下载另一份Metro来制作像这样的工作,那么说Java 7附带Metro是什么意思呢?是否可以仅使用Java附带的jar在Tomcat中运行JAX-WS Web服务?
我被告知Java 7应该包含JAX-WS,这样我就不需要像Apache CXF那样的库.但是,官方文件说:
此版本包含用于XML处理的Java API(JAXP)1.4.5,支持用于XML绑定的Java体系结构(JAXB)2.2.3,并支持用于XML Web服务的Java API(JAX-WS)2.2.4.
此外,JAX-WS上的Eclipse页面说明了使用Apache CXF,Sun Metro或Apache Axis等实现.我可以在JAX-WS上找到的每个示例/教程都使用像CXF或Metro这样的库集.
我在Eclipse中有一个项目,它在一个带有javax.jws.WebService注释的类上调用"Endpoint.publish(...)".下面引用的WSDL文件驻留在Eclipse之外.这个项目运行(作为"Java应用程序")与Apache CXF库包括.一旦我删除它们(以及Eclipse对Apache CXF的引用),它就会崩溃并出现以下异常:
com.sun.xml.internal.ws.server.ServerRtException: [failed to localize] cannot.load.wsdl(http://localhost:8081/wsdl/csw.wsdl)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.getPrimaryWsdl(EndpointImpl.java:313)
Run Code Online (Sandbox Code Playgroud)
所以我要么做错了,要么Apache正在提供JDK本身只有API的东西的实现.请指出哪种情况,以及相关内容的通常链接.
与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?