6

jdk1.6.0_31 で実行されるスタンドアロンのバッチ プログラムがあります。このスタンドアロン プログラムには、JAX-WS クライアントと EJB クライアントがあります。EJB クライアント用に wlfullclient.jar を追加するまで、JAX-WS クライアントは jar を追加しなくても正常に動作していました。クラスパスに wlfullclient.jar があると、以下の例外が発生します。これを解決する方法を教えてください。あなたの助けに感謝。

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/xml/ws /spi/ProviderImpl
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at javax.xml.ws.spi.FactoryFinder.safeLoadClass(FactoryFinder.java:150)
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.java:30)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:90)
at javax.xml.ws.spi.Provider.provider(Provider.java:83)
at javax.xml.ws.Service.<init>(Service.java:56)
at javax.xml.ws.Service.create(Service.java:691)
4

2 に答える 2

3

この質問を調査して見つけた後、私は同じ問題を抱えていました。直感に従って、Weblogic Server のドキュメントを調べました。

私は代わりのクライアントを探していました。

基本的に 3 つのクライアント jar があります。

  • wlclient.jar - IIOP クライアント用
  • wlfullclient.jar - 1 つの jar 内のすべてのもの (巨大なサイズ ~50MB)
  • wlthint3client.jar - 非常にシンな t3 クライアント用

最後のオプションは、Weblogics 独自の t3 プロトコルをサポートするスリム化されたバージョンのクライアントです。機能面でいくつかの欠点がありますが、サーバー上の ejb と通信するだけであれば、すべて揃っています。

フォーム wlfullclient.jar を wlthint3client.jar に切り替えた後、すべてNoClassDefFoundErrorがなくなりました。

ここにWeblogicドキュメントへのリンクがあります。

于 2013-02-27T08:56:58.883 に答える
1

これで運が良かったですか?JetSpeed 2.2.2 (Tomcat ベースのポータル サーバー) で実行しているのとまったく同じ問題が発生しています。サーバーの lib フォルダーに wlfullclient.jar を含める前に、Web サービスは正常に動作します。含めた後、上記で含めたスタックトレースとまったく同じようにインスタンス化すると爆発します。

私の考え(この段階では理論的)は次のとおりです。

wlfullclient.jar には、既に Metro Web サービス スタックにあるクラスと同じ名前とパッケージを持つクラスがあります。このクラスは、Metro クラスより先にロードされ、Metro 実装ではなく Web ロジック実装をロードする経路にクラスロードを指示します。Web ロジックの実装は存在せず (標準の Java を使用したいので、それらを含める努力をしたわけではありません)、これが NoClassDefFound を説明しています。

Metro と wlfullclient.jar の両方で、同じ名前とパッケージを持つこの想定されたクラスが見つからなかったことは注目に値します。この意味で、クラスは現時点でのヒッグス粒子に似ています。では、それが存在すると仮定して、どうすればよいのでしょうか?

あなたが解決策を見つけた場合、私は知りたいと思っています。

また、次を追加する必要があります。

同じサーバー上で実行されている他のポートレットで使用されるため、wlfullclient.jar を含める必要があります。削除できませんが、自分では使用していません。

于 2012-11-19T21:31:36.560 に答える