2010-03-13 81 views
2

這是問題在這裏的延續: JBoss - does app have to be compiled under same jdk as JBOSS is running under?Web服務客戶端在JBOSS 5.1 JDK6

不過,它需要一個新的問題,這是很不同的。

我正在嘗試使用jdk6來運行JBOSS 5.1,並且我下載了JDK6版本的JBOSS 5.1。這工作正常,我的EAR應用程序正常部署。然而,當我想用​​這樣的代碼運行Web服務客戶端:

public static void main(String[] args) throws Exception { 
    System.out.println("creating the web service client..."); 
    TestClient client = new TestClient("http://localhost:8080/tc_test_project-tc_test_project/TestBean?wsdl"); 
    Test service = client.getTestPort(); 
    System.out.println("calling service.retrieveAll() using the service client"); 
    List<TestEntity> list = service.retrieveAll(); 
    System.out.println("the number of elements in list retrieved using the client is " + list.size()); 
} 

我得到以下異常:

javax.xml.ws.WebServiceException: java.lang.UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage 
    at org.jboss.ws.core.jaxws.client.ClientImpl.handleRemoteException(ClientImpl.java:396) 
    at org.jboss.ws.core.jaxws.client.ClientImpl.invoke(ClientImpl.java:302) 
    at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:170) 
    at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:150) 

現在,這裏是真正有趣的部分。如果我將JDK上面的代碼從JDK6運行到JDK5,那麼上面的異常就會消失!這真的很奇怪。

我發現上面的代碼在JDK6下運行的唯一方法是將JBOSS_HOME/lib/endorsed文件夾複製到JDK6_HOME/lib。這似乎不應該是必要的,但它是。

除了使用我剛描述的解決方法外,是否有其他方法可以使此工作成爲可能?

回答

3

大致看起來好像您遇到了JAX-WS作爲JDK 1.6的官方功能。不要將文件複製到'lib',將它們複製到'endorsed'目錄(java.endorsed.dirs中列出的目錄)。 This可能會有所幫助。

如果你有最新的1.6,你可以像Apache CXF一樣來解決這個問題。有關如何在1.6環境中使用CXF的信息,請參閱文檔。

+0

不知道我理解。我將JBOSS_HOME/lib/endorsed文件夾複製到JDK6_HOME/lib,所以我最終選擇了JDK6_HOME/lib/endorsed。你的意思是別的嗎? – dcp 2010-03-13 14:01:18

+0

據我所知,JBoss不使用JDK/lib/endorsed文件夾。您需要將所有webapps所需的所有jar放入JBOSS/lib/endorsed文件夾。 – Stroboskop 2011-11-14 16:50:04

2

各自的bug report和其他地方(例如herehere)有各種建議和解釋。我不知道他們工作得有多好。