我試圖調用使用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