1

Eclipse RCP アプリケーション内からMetro ライブラリを使用して Web サービスを呼び出そうとしています。関連する Metro jar ( webservices-tools.jarwebservices-rt.jar、およびwebservices-api.jar) をプラグインにバンドルし、メイン アプリケーション プラグインをこの新しい Metro プラグインに依存させました。

もディレクトリに追加しましたwebservices-api.jar$JAVA_HOME/jre/lib/endorsedMetro の Web サイトによると、これは Java 1.6 で Metro を使用する場合に必要です。

Web サービスを呼び出すと、次のエラーが表示されます。

javax.xml.ws.WebServiceException: Provider com.sun.xml.ws.spi.ProviderImpl not found
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.jav a:38)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:133)
at javax.xml.ws.spi.Provider.provider(Provider.java:83)
at javax.xml.ws.Service.<init>(Service.java:56)  
...  
Caused by: java.lang.ClassNotFoundException: com.sun.xml.ws.spi.ProviderImpl
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301 )
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at org.eclipse.core.runtime.internal.adaptor.ContextFinder.load Class(ContextFinder.java:129)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.jav a:34)
... 43 more

このクラスcom.sun.xml.ws.spi.ProviderImplwebservices-rt.jar、Metro プラグインの一部である にあります。さらに、アプリケーション プラグイン コードがこのクラスを正常にロードできることを確認したので、なぜロードjavax.xml.ws.spi.FactoryFinderできないのかわかりません。

javax.xml.ws.spi.FactoryFinder( jrewebservices-api.jarの承認されたディレクトリに入れなければならなかった jar) にあるので、これは承認されたコードが Eclipse プラグインからクラスをロードできないことに関係していると思われます。

承認されたディレクトリから JVM によってロードされたコードが、プラグインからクラスをロードできないということですか? これを有効にする方法はありますか?

Java バージョン: 1.6.0_16

Eclipse バージョン: Eclipse Java EE IDE for Web Developers ビルド ID: 20090920-1017 (それ以降のバージョンは表示されません)

Metro バージョン: Glassfish 2.1 に同梱

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

1

この問題に遭遇した他の人のために、私は解決策を見つけることができました. 以下の JVM オプションを使用して、wsit 構成ファイルを含む config ディレクトリと共に、metro jar を JVM のブート クラスパスに追加しました。

-Xbootclasspath/a:./lib/webservices-api.jar
-Xbootclasspath/a:./lib/webservices-rt.jar
-Xbootclasspath/a:./lib/webservices-tools.jar
-Xbootclasspath/a:./config

これが機能webservices-api.jarするために、 が存在する必要はなくなりました$JAVA_HOME/jre/lib/endorsed。これは確かに通常の Eclipse モデルではありませんが、Java 1.6 を使用する Eclipse RCP アプリケーション内で Metro を使用する方法として私が見つけた唯一の方法です。

于 2010-01-28T20:21:43.020 に答える
0

Java SE 6 にはすでにメトロが含まれています。jax-ws 2.0 が含まれているため、これらの jar ファイルを完全に削除できます。

jax-ws 2.1 を Java SE 6 と一緒に使用する必要がある場合のみ、こちらの手順に従ってください -> https://jax-ws.dev.java.net/faq/index.html

編集:最後のコメントについては正しいです。承認されたフォルダーに配置されたコードは、承認されたクラス ローダーで読み込まれるため、プラグインにあるクラスを見つけることができません。すべての Metro jar を承認済みのディレクトリに配置することをお勧めします。このようにして、プラグインだけでなく、VM 全体で利用できるようになります。

于 2010-01-20T17:21:38.720 に答える