我正在尝试使用Metro 库从 Eclipse RCP 应用程序中调用 Web 服务。我将相关的 Metro jar(webservices-tools.jar
、webservices-rt.jar
和webservices-api.jar
)捆绑到一个插件中,并使我的主应用程序插件依赖于这个新的 Metro 插件。
我还添加webservices-api.jar
到我的$JAVA_HOME/jre/lib/endorsed
目录。根据 Metro 网站,在使用带有 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.ProviderImpl
位于 中webservices-rt.jar
,它是我的 Metro 插件的一部分。此外,我已经验证我的应用程序插件代码可以成功加载这个类,所以我不确定为什么javax.xml.ws.spi.FactoryFinder
不能。
由于javax.xml.ws.spi.FactoryFinder
驻留在webservices-api.jar
(我必须将 jar 放入 jre 的背书目录中),我怀疑这与背书代码无法从 Eclipse 插件加载类有关。
JVM从背书目录加载的代码是否无法从插件加载类?有什么办法可以启用它吗?
Java版本:1.6.0_16
Eclipse 版本:面向 Web 开发人员的 Eclipse Java EE IDE 构建 ID:20090920-1017(它不显示除此之外的版本)
Metro 版本:与 Glassfish 2.1 捆绑在一起
任何帮助是极大的赞赏。谢谢。