2011-05-18 65 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

相關問題