use*_*752 7 java web-services java-metro-framework jax-ws tomcat7
我正在尝试使用Metro 2.1在Windows Server 2008 R2上使用Tomcat 7.0.11创建一个简单的Web服务.我来自C#/ WCF背景,试图更好地了解Web服务的互操作性.我实际上是在跟随Martin Kalin的书"Java Web Services Up and Running"中的一个例子.我有以下内容:
CATALINA_HOME=c:\tomcat-7.0.11
Run Code Online (Sandbox Code Playgroud)
在catalina.properties文件中我有:
server.loader=c:/metro-2.1/bin/*.jar
Run Code Online (Sandbox Code Playgroud)
(注意,我也尝试过将此路径添加到common.loader).
我已将以下METRO jar文件复制到CALALINA_HOME\lib:
webservices-api.jar,webservices-extra.jar,webservices-extra-api.jar,webservices-rt.jar,webservices-tools.jar
和CALALINA_HOME \背书:
web服务-api.jar文件
(注意,我最初尝试使用metro-on-tomcat.xml ant文件,但它似乎没有为tomcat 7更新.*)
我还将webservices-api.jar复制到JAVA_HOME\jre\lib\endorsed
我已经尝试将其他METRO罐子放在上述位置,但也没有帮助.
现在,Tomcat启动正常并初始化METRO ok,这是catalina日志文件中的相关部分:
信息:部署Web应用程序目录ROOT 18-May-2011 08:00:55 com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized INFO:WSSERVLET12:JAX-WS上下文监听器初始化18-May-2011 08: 01:07 com.sun.xml.ws.server.MonitorBase createRoot INFO:Metro监控rootname成功设置为:com.sun.metro:pp = /,type = WSEndpoint,name = -TempConvertImplService-TempConvertImplPort 18-May-2011 08 :01:08 com.sun.xml.ws.transport.http.servlet.WSServletDelegate INFO:WSSERVLET14:JAX-WS servlet初始化
因此,您认为Tomcat已经加载了所有METRO类.根据我收集的内容,WSServlet是JAX-WS 2.1的一部分,它作为METRO的一部分提供,因此应该已经加载.但是,当我实际尝试浏览到我的服务的WSDL时,我在localhost日志中获得以下内容:
SEVERE:在org.apache的org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)中为servlet TempConvertWS java.lang.ClassNotFoundException:com.sun.xml.ws.transport.http.WSServlet分配异常. catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)atg.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)....(堆栈跟踪的其余部分)
我的sun-jaxws.xml看起来像这样:
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
<endpoint
name="TempConvertWS"
implementation="TimeServer.TempConvertImpl"
url-pattern="/tc"
/>
</endpoints>
Run Code Online (Sandbox Code Playgroud)
我的web.xml文件中的相关部分是:
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>TempConvertWS</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.WSServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TempConvertWS</servlet-name>
<url-pattern>/tc</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
任何人都可以看到为什么Tomcat在浏览服务时无法找到/加载WSServlet类?
使用 Tomcat 6,我在 catalina.properties 中设置共享.loader 并将 webservices-api.jar 添加到<catalina-home>\endorsed
这就像一个魅力。
出于开发和测试的目的,您可以将 webservices-extra.jar、webservices-extra-api.jar、webservices-rt.jar、webservices-tools.jar 放入其中,<catalina-home>/lib
而不是使用 shared.loader 指令。我发现这也与 Eclipse 更兼容。
我将使用 Tomcat 7 进行测试,看看它是否有任何不同。
*更新:同样的技巧适用于 Tomcat 7.0.14
*更新2:很抱歉我没有立即看到它,但我刚刚注意到在您的web.xml中,指定<servlet-class>
是错误的。它应该是com.sun.xml.ws.transport.http.servlet.WSServlet
归档时间: |
|
查看次数: |
15489 次 |
最近记录: |