5

最近、ライブ環境の Web サービス クライアントに例外が発生しました。

java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder 
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:107)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:135)
at com.sun.proxy.$Proxy146.search(Unknown Source)
....

StackOverflow でのいくつかの投稿を含め、オンラインで多くの検索を行いました。

CXF: NoClassDefFoundError: SOAPFaultBuilder で Web サービス例外をキャッチする

クラス com.sun.xml.internal.ws.fault.SOAPFaultBuilder を初期化できませんでした

java.lang.NoClassDefFoundError: クラス com.sun.xml.internal.ws.fault.SOAPFaultBuilder を初期化できませんでした

そして、クライアントがサーバーから SOAP Fault を受信し、jar ファイルが欠落していると理解しました。だから私は最初にそれを再作成することによって問題を解決しようとしています.

Eclipse で単純な Web サービス サーバー プロジェクトを作成しました。このプロジェクトでは、Web メソッドが で注釈が付けられた単純な障害クラスをスローし@WebFaultます。次に、Web メソッドを使用する単純な Web サービス クライアント プロジェクトを作成しました。クライアント プロジェクトには、クラスパスに追加のライブラリ/jar がありません。持っているのは JRE だけです。驚いたことに、NoClassDefFoundError 例外がスローされませんでした。代わりにjavax.xml.ws.soap.SOAPFaultException、サーバー側で定義された I を取得しました。

クラスSOAPFaultBuilderは確かにJREのrt.jarにあります。したがって、私が作成した単純な Web サービス プロジェクトは、おそらく正常に機能します。しかし、ライブ環境の Web サービス クライアントがNoClassDefFoundError例外をスローするのはなぜでしょうか? そのプロジェクトのクラスパスには間違いなく rt.jar があります。

誰でもこの問題に光を当てることができますか? いくつかの jar ファイル (jaxws RI または Apache CXF などから) が欠落している場合、作成した非常に単純なクライアントがエラーをスローしなかったのはなぜですか? ライブ環境とローカル環境の両方で Java7u51 を使用しています。

4

2 に答える 2

1

同じエラーが発生し、tomcat lib フォルダーから jax-impl.jar を削除してこの問題を解決しました。jaxb jar バージョンと、Tomcat にインストールされている Web アプリケーションの 1 つとの競合の可能性がありました。

http://programtalk.com/java/i-was-running-gwt-application-on-tomca/

于 2015-10-12T10:42:18.030 に答える