我试图调用使用Metro library从Eclipse RCP应用程序中的Web服务Eclipse RCP的类加载问题。我捆起相关地铁罐子(webservices-tools.jar
,webservices-rt.jar
和webservices-api.jar
)成一个插件,使我的主要应用插件依赖于这个新的地铁插件。与地铁
我还添加了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
,这是我的地铁插件的一部分。此外,我已验证我的应用程序插件代码可以成功加载此类,所以我不确定为什么javax.xml.ws.spi.FactoryFinder
不能。由于javax.xml.ws.spi.FactoryFinder
驻留在webservices-api.jar
(我不得不放在jre的背书目录中),我怀疑这与代码不能从Eclipse插件加载类有关。
是指从endorsed目录通过JVM加载代码不能从插件加载类的情况?有什么办法可以启用它吗?
Java版本:1.6.0_16
Eclipse版本:Eclipse的Java EE的IDE为Web开发人员建立ID:20090920-1017(它不会显示一个版本超出)
Metro版:捆绑Glassfish的2.1
任何帮助是极大的赞赏。谢谢。
问题是Java SE 6版本的JAX-WS没有实现安全性。我试图根据你的建议去除地铁罐,在这种情况下,我通过了上面的错误,但后来从服务器收到一个错误,抱怨我的客户端没有包含安全头(确认JDK版本的JAX-WS不实施安全)。 所以我想我真的需要使用Metro版本的JAX-WS来实现安全性。 – Jeff 2010-01-20 17:31:09
你确定缺乏安全性吗?该指南明确指出“Java SE 6 Update Release 4及更高版本已经包含JAX-WS 2.1 API,并且不再需要以下解决方法” – Yoni 2010-01-20 17:46:54
关于您的编辑,Metro站点明确声明_only_ webservices-api.jar应该进入背书目录,并没有其他的罐子。尽管如此,我确实尝试将其他地铁罐放在支持的目录中。当我这样做,我开始得到奇怪的LinkageErrors。 关于缺乏安全性,我在另一个在线论坛上阅读。这并不意味着它当然是真的,但是当我尝试运行没有任何地铁瓶罐时,客户端运行但在请求中不包含安全标头(由服务器和tcpmon返回的错误确认)。 – Jeff 2010-01-20 18:38:40