2010-03-13 4 views
2

Это продолжение вопроса здесь: JBoss - does app have to be compiled under same jdk as JBOSS is running under?Web Service Client в JBOSS 5.1 с JDK6

Это достаточно разные, хотя, что требуется новый вопрос.

Я пытаюсь использовать jdk6 для запуска JBOSS 5.1, и я загрузил версию JBOSS 5.1 JDK6. Это отлично работает, и мое приложение EAR отлично развертывается. Однако, когда я хочу, чтобы запустить клиент веб-службы с кодом, как это:

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», скопируйте их в «одобренный» каталог (один из них указан в java.endorsed.dirs). This может быть полезно.

Если у вас есть обновленный 1.6, вы можете обойти это так же, как это делает Apache CXF. Информацию о том, как использовать CXF в среде 1.6, см. В документации.

+0

Не уверен, что я понимаю. Я взял папку JBOSS_HOME/lib/endorsed и скопировал ее в JDK6_HOME/lib, поэтому я закончил с JDK6_HOME/lib/одобренным. Вы имели в виду что-то еще? – dcp

+0

Насколько я знаю, JBoss не использует папку JDK/lib/endorsed. Вам нужно поместить все банки, необходимые для всех веб-приложений, в папку JBOSS/lib/endorsed. – Stroboskop

2

В соответствующем bug report и других источниках имеются различные предложения и пояснения (например, here и here). Я не знаю, как хорошо они работают.