7

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クラスを見つけてロードできない理由を誰でも見ることができますか?

4

1 に答える 1

2

Tomcat 6 では、共有.loader を catalina.properties に設定し、webservices-api.jar を追加しました<catalina-home>\endorsed

それは魅力のように機能しました。

開発とテストの目的で、shared.loader ディレクティブを使用する<catalina-home>/lib 代わりに、webservices-extra.jar、webservices-extra-api.jar、webservices-rt.jar、webservices-tools.jar を配置することができます。これはEclipseとの互換性も高いことがわかりました。

Tomcat 7 でテストして、何らかの違いがあるかどうかを確認します。

*更新: Tomcat 7.0.14 でも同じトリックが機能します

*Update2: すぐに表示できなくて申し訳ありませんが、web.xml の指定<servlet-class>が間違っていることに気付きました。そのはずcom.sun.xml.ws.transport.http.servlet.WSServlet

于 2011-05-20T17:39:58.850 に答える