2

シンプルな JAX-WS Web サービスを開発しています。ANT ビルド スクリプトを使用して WAR ファイルを作成しています。ファイルを Tomcat 7 サーバーにデプロイすると、次の例外がスローされ、次のようなデプロイ エラーが発生します。

JAXB 2.1 API はブートストラップ クラスローダーから読み込まれますが、この RI (jar:file:/D:/DreamSoln/Server/apache-tomcat-7.0.29/webapps/WebserviceDemo/WEB-INF/lib/jaxb-impl. jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) には 2.2 API が必要です。承認されたディレクトリ メカニズムを使用して、jaxb-api.jar をブートストラップ クラスローダーに配置します。

私はJDK 1.6をインストールしました。承認されたメカニズムを試しました。つまり、lib/endorsedディレクトリを作成し、そこにjaxb-api.jarとjaxws-api.jarをコピーしました。しかし、それでもうまくいきません。

Web アプリの WEB-INF/lib から jaxb-api.jar と jaxws-api.jar を削除する必要がありますか?

他に何をする必要がありますか?

4

3 に答える 3

2

tomcat lib を正しく承認していないと思います。このフォルダーlib/endorsedは以前のバージョンの tomcat (私の記憶が正しければ Tomcat 5.5 のように) で使用されていましたが、新しいバージョン (Tomcat 6 以降) では、承認された lib は通常<TOMCAT_HOME>/endorsed(存在しない場合は作成する必要があります) にあります。

実際、Tomcat はシステム プロパティjava.endorsed.dirsを使用して、承認されたフォルダーの場所を定義します。そのため、Tomcat インストールでこの値を確認してください。

これを確認する方法は?アプリケーションにあるサーブレット/リスナーでこのプロパティを出力します。

コンテキスト リスナーを使用する (このブログから着想を得た)

public class WebappLoadListener implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent arg0) {
    }

    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("\n\n\n ENDORSED DIR: " +System.getProperty("java.endorsed.dirs"));      
    }
}

それが役立つことを願って、

于 2012-07-24T08:04:36.333 に答える
0

はい、承認されたディレクトリにある場合は、これらを webapp から削除する必要があります。

Tomcat の Java EE バージョンであるTomEE Plusを試すと、JAX-WS サポートは既に統合されており、JAXB 2.2 は承認されたディレクトリにあります。

于 2012-07-24T18:16:31.707 に答える
0

Tomcat 7 はそのままでは JAX-WS をサポートしません。Tomcat で JAX-WS を有効にするには、必要です

  1. Tomcat の lib に少なくとも「catalina-ws.jar」を含める必要があります (「承認済み」である必要はありません!)。

「catalina-ws.jar」は「Tomcat extras」としてダウンロードする必要があり、TC7 のデフォルトのダウンロード アーカイブには含まれていません。

  1. 「JAX-WS RI」ライブラリを Web アプリケーション ライブラリに含めます。

「次のマイルストーン: Tomcat と JBoss での JAX-WS Web サービス」を Google で検索してみてください。このトピックに関する詳細情報が見つかります。

(ただし、JBoss 7 のような Java EE コンテナーの場合、すべてのライブラリーが既に存在します。)

于 2013-02-15T12:48:00.393 に答える