2011-05-18 62 views
7

我试图使用Metro 2.1在Windows Server 2008 R2上使用Tomcat 7.0.11创建一个简单的webservice。我来自C#/ WCF背景,试图更好地理解Web服务的互操作性。实际上,我正在关注Martin Kalin的书“Java Web服务启动和运行”中的一个例子。我有以下几点:使用Metro 2.1的Tomcat 7.0.11上的WSServlet ClassNotFoundException错误

CATALINA_HOME=c:\tomcat-7.0.11 

在catalina.properties文件我有:

server.loader=c:/metro-2.1/bin/*.jar 

(注意,我也尝试添加该路径common.loader太)。

我复制到以下METRO jar文件CALALINA_HOME \ lib目录下:

web服务-api.jar中, web服务,extra.jar, web服务,额外api.jar中, webservices- rt.jar中, web服务-的tools.jar

,并CALALINA_HOME \赞同:

web服务-api.jar中

(注意,我本来试图用地铁上,tomcat.xml蚂蚁文件,但它似乎并没有为Tomcat 7 *已经被更新)

我我也试图把其他METRO罐子放在上面的位置,但也没有任何帮助。

现在,Tomcat的启动,确定并初始化METRO好吧,这里从卡塔利娜日志文件中的相关部分:

INFO:部署Web应用程序 根目录18 2011年5月8点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:城域监控 rootname成功设置为: com.sun.metro:PP = /,类型= WSEndpoint,名称= -TempConvertImplService-TempConvertImplPort 18 2011年5月8点01分08秒 com.sun.xml.ws.transport.http.servlet.WSServletDelegate INFO :WSSERVLET14:JAX-WS servlet初始化

因此,你会认为Tomcat已经加载了所有的METRO类。从我收集的内容来看,WSServlet是作为METRO的一部分发货的JAX-WS 2.1的一部分,因此它应该已经加载。但是,当我真正尝试浏览到我的服务的WSDL我得到本地主机日志中:

严重:分配例外的servlet TempConvertWS 抛出java.lang.ClassNotFoundException: 了com.sun.xml。 ws.transport.http。WSServlet 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 在 org.apache。 catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415).... (堆栈跟踪的其余部分)

我的太阳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> 

和从我的网站相关部分。 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类浏览到该服务时看到了什么?

+1

它需要的是jaxws-ri库 我认为它们是'jaxws-api.jar,jaxws-rt.jar,jaxws-tools.jar,streambuffer.jar'以提及一些。确保它们在'CATALINA_HOME/lib'中 – 2013-09-09 13:01:32

回答

2

对于Tomcat 6,I设置共享 .loader在catalina.properties并加入web服务-api.jar文件到<catalina-home>\endorsed

即工作就像一个魅力。

用于开发和测试的目的,你可以只是把web服务,extra.jar,web服务,额外api.jar文件,Web服务,rt.jar中,Web服务-的tools.jar成<catalina-home>/lib,而不是使用shared.loader指示。我发现这也与Eclipse更兼容。

我将用Tomcat 7进行测试,看看它是否有任何不同。

*更新:同样的伎俩工程为Tomcat 7.0.14

* UPDATE2:对不起,我没看到它一次,但我注意到,您在web.xml中,指定<servlet-class>是错误。它应该是com.sun.xml.ws.transport.http.servlet.WSServlet

+0

你是否设法使它工作?如果是这样,你能否提供解决方案以备将来参考? – Paaske 2011-10-09 20:41:30

相关问题