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\endorsed へ:
webservices-api.jar
(注、最初はmetro-on-tomcat.xml antファイルを使用しようとしましたが、tomcat 7.*用に更新されていないようです)
また、webservices-api.jar を JAVA_HOME\jre\lib\endorsed にコピーしました
他の METRO jar も上記の場所に配置しようとしましたが、役に立ちませんでした。
これで、Tomcat が正常に起動し、METRO が正常に初期化されました。これは、catalina ログ ファイルの関連セクションです。
情報: Web アプリケーション ディレクトリをデプロイしています ROOT 18-May-2011 08:00:55 com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized 情報: WSSERVLET12: JAX-WS コンテキスト リスナーの初期化 18-May-2011 08: 2011 年 5 月 18 日:01:08 com.sun.xml.ws.transport.http.servlet.WSServletDelegate 情報: WSSERVLET14: JAX-WS サーブレットの初期化中
したがって、Tomcat がすべての METRO クラスをロードしたと考えることができます。私が集めたものから、WSServletはMETROの一部として出荷されているJAX-WS 2.1の一部であるため、ロードされているはずです。しかし、実際にサービスの WSDL を参照しようとすると、localhost ログに次のように表示されます。
SEVERE: org.apache の org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) のサーブレット 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クラスを見つけてロードできない理由を誰でも見ることができますか?