我正在尝试使用 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
在 catalina.properties 文件中,我有:
server.loader=c:/metro-2.1/bin/*.jar
(注意,我也尝试将此路径添加到 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\认可:
webservices-api.jar
(注意,我最初尝试使用 metro-on-tomcat.xml ant 文件,但它似乎没有针对 tomcat 7 进行更新。*)
我还将 webservices-api.jar 复制到 JAVA_HOME\jre\lib\endorsed
我也尝试将其他 METRO 罐子放在上述位置,但没有帮助。
现在,Tomcat 启动正常并初始化 METRO ok,这是 catalina 日志文件中的相关部分:
信息:部署 Web 应用程序目录根 2011 年 5 月 18 日 08:00:55 com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized 信息:WSSERVLET12:JAX-WS 上下文侦听器初始化 2011 年 5 月 18 日 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 信息:WSSERVLET14:JAX-WS servlet 初始化
因此,您会认为 Tomcat 已经加载了所有 METRO 类。从我收集到的信息来看,WSServlet 是 JAX-WS 2.1 的一部分,它是作为 METRO 的一部分提供的,所以它应该已经加载了。但是当我真正尝试浏览到我的服务的 WSDL 时,我在 localhost 日志中得到以下信息:
严重:为 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 上的 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) at org.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>
我的 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>
任何人都可以从中看出为什么Tomcat在浏览服务时找不到/加载WSServlet类?