最近、ライブ環境の 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 を使用しています。