1

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
4

1 に答える 1

1

JAX-WS の impl jar が見つからないようです。impl の提供を Codehaus に依存している場合は、Codehaus の impl が機能することを確認することをお勧めします。彼らのサイトによると、それは新しくサポートされたコンポーネントです。

別の方法は、独自の impl jar を提供してクラス パスに配置し、そこに JAX-WS インターフェースが見つかるようにすることです。ただし、通常は、Web サービス アプリをデプロイするアプリ サーバーのクラス パスに impl を含める必要があります。

于 2013-05-17T17:45:25.343 に答える