【发布时间】:2010-01-20 17:11:03
【问题描述】:
我正在尝试从 Eclipse RCP 应用程序中使用 Metro library 调用 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 捆绑在一起
非常感谢任何帮助。谢谢。
【问题讨论】:
标签: java eclipse-rcp java-metro-framework