Клиент веб-службы в JBOSS 5.1 с JDK6

Это продолжение вопроса здесь: JBoss — должно ли приложение быть скомпилировано под тем же jdk, что и JBOSS?

Это достаточно отличается, хотя это потребовало нового вопроса.

Я пытаюсь использовать 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. Кажется, что это не должно быть необходимо, но это так.

Есть ли другой способ заставить эту работу работать, кроме использования обходного пути, который я только что описал?


person dcp    schedule 13.03.2010    source источник


Ответы (3)


Выглядит примерно так, как если бы вы столкнулись с наличием JAX-WS в качестве официальной функции JDK 1.6. Не копируйте вещи в «lib», скопируйте их в «одобренный» каталог (один из перечисленных в java.endorsed.dirs). Это может оказаться полезным.

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

person bmargulies    schedule 13.03.2010
comment
Не уверен, что понимаю. Я взял папку JBOSS_HOME/lib/endorsed и скопировал ее в JDK6_HOME/lib, так что в итоге я получил JDK6_HOME/lib/endorsed. Вы имели в виду что-то другое? - person dcp; 13.03.2010
comment
Насколько я знаю, JBoss не использует папку JDK/lib/endorsed. Вам нужно поместить все jar-файлы, необходимые для всех веб-приложений, в папку JBOSS/lib/endorsed. - person Stroboskop; 14.11.2011

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

person Tomislav Nakic-Alfirevic    schedule 13.03.2010

Информацию об этой проблеме можно найти в официальном руководстве по установке и началу работы JBoss: http://docs.jboss.org/jbossas/docs/Installation_And_Getting_Started_Guide/5/html/Installation_Alternatives.html

person PeterB    schedule 23.03.2011