WSDL ドキュメントから Web サービス クライアントを生成するために netbeans を使用しています。
クライアントは、本番環境に配置するまで正常に動作します。jar は、本番クラスパスに配置した jaxws-api.jar および jaxb-api.jar から javax.ws.xxxxx クラスに対して生成されました。
私たちの実稼働環境には、xfire ライブラリに依存する他のコードがあります。SubmissionAPI() をインスタンス化しようとすると、NoClassDefFound 例外が発生します。以下にスタックトレースを貼り付けます。
UBLSoapTest クラスは正しい「サービス」クラスを呼び出しているように見えますが、「サービス」クラスは org.codehaus.xfire.jaxws.Provider を呼び出しています。
javax.xml.ws.Service のソースを確認したところ、「import javax.xml.ws.spi.Provider;」が含まれています。
内部に javax.xxxx クラスを使用して jar をアセンブルしようとしましたが、それでも同じ結果が得られます。マニフェスト ファイルにクラスパスを設定する必要があると思われますが、何が必要なのかわかりません。
FAIL: Exception: java.lang.NoClassDefFoundError: Could not initialize class
org.codehaus.xfire.jaxws.JAXWSHelper
org.codehaus.xfire.jaxws.ServiceDelegate.<init>(ServiceDelegate.java:33)
org.codehaus.xfire.jaxws.ServiceDelegate.<init>(ServiceDelegate.java:53)
org.codehaus.xfire.jaxws.Provider.createServiceDelegate(Provider.java:32)
javax.xml.ws.Service.<init>(Service.java:56)
org.ubl.soap.test.SubmissionAPI.<init>(SubmissionAPI.java:44)
ここからどこを見ればいいのか、ちょっと迷ってしまいます。
マニフェストにクラスパスを設定しようとしましたが、ほとんど成功しませんでした。
私たちが試した基本的なjar構造は次のとおりです。
/org/xxxx
/META-INF/xxx
と
/org/xxx
/META-INF/xxx
/javax/xxx
と
/org/xxx
/META-INF/xxx
/jaxws-api.jar
/jaxb.jar