3

SOAP サービスを呼び出すアプリケーション クライアントがあります。ws クラスを生成するために、glassfish ディストリビューションの wsimport を使用しましたが、Glassfish v2 ではすべて正常に動作します。v3 から実行 (webstart) すると、アプリは正常に動作しますが、SOAP 呼び出しを開始すると、

Exception in thread "Thread-146" java.lang.NoClassDefFoundError: com/sun/istack/logging/Logger
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at com.sun.jnlp.JNLPClassLoader.findClass(JNLPClassLoader.java:257)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    at com.sun.xml.ws.policy.jaxws.WsitPolicyResolver.<clinit>(WsitPolicyResolver.java:62)
    at com.sun.xml.ws.policy.jaxws.WsitPolicyResolverFactory.doCreate(WsitPolicyResolverFactory.java:48)
    at com.sun.xml.ws.api.policy.PolicyResolverFactory.create(PolicyResolverFactory.java:58)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:131)
    at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:267)
    at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:230)
    at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:178)
    at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:106)
    at javax.xml.ws.Service.<init>(Service.java:56)
    at (class generated from wsdl)
    at (SOAP call)

名前の付いたクラスさえどこにも見つからず、ネット上ではほとんど参照されていないようです。

編集jaxb-osgi.jarにあります

これはグラスフィッシュによって提供されるはずではありませんか? アプリにそれを含めると、競合のリスクが生じるのでしょうか?

4

1 に答える 1

3

問題の説明と再現手順はまったく明確ではありませんが、GlassFishv3バンドルMetro2.0とMetro2.0にはJAX-WS2.2が含まれており、JavaSE6に付属するJAX-WS2.1と衝突します。

まさにこれが起こっているときの詳細な分析については、このWikiページを参照してください。これらの失敗の理由は、Metro2.0にJAX-WS2.2が含まれているためです。これは、JavaSE6に組み込まれているJAX-WS2.11と衝突します。これらの失敗は、Metro2.0をインストールスクリプトmetro-でインストールしなかった場合にのみ表示されます。 on-glassfish.xml/metro-on-tomcat.xml。これは、たとえば、アップデートセンターを介してGlassFishV3用のMetro2.0をインストールした場合、またはNetBeansに組み込まれたバージョンのGlassFishV3を使用した場合に当てはまります。

最も簡単な解決策は、 Metro 2.0ナイトリービルドをダウンロードして、インストールスクリプトを実行することです。このスクリプトは、JAX-WS2.2APIを含むファイルwebservices-api.jarをにコピーします<java-home>/lib/endorsed。または、もちろんwebservices-api.jar、適切な承認済みディレクトリに手動でコピーすることもできます。

また、これcom/sun/istack/logging/LoggerJAX-WS 2.2の依存関係であるため、前述のWikiページで説明されている状況にある可能性が非常に高くなります。

Metro2.0にはJAX-WS2.2がバンドルされています。Java SE6にはJAX-WS2.1が含まれています(SE6アップグレード3以前のバージョンにはJAX-WS2.0が含まれています)。つまり、JavaはデフォルトでJAX-WS 2.1 APIを取得し、JAX-WS2.2機能を利用する実装とコードは機能しません。

于 2010-03-05T23:10:00.877 に答える