веб-клиент для веб-службы

У меня есть веб-сервис, который отлично работает, когда я обращаюсь к ним из приложения J2SE (настольного). Чтобы получить доступ к этой услуге, я следую:

  1. сгенерировать классы-заглушки по ссылке wsdl с помощью инструмента java wsimport
  2. затем я создаю сервис, используя сгенерированные классы, и запускаю одну из операций wsdl. Это выглядит так:

    MyWebServiceService webService = новый MyWebServiceService ();

    Порт MyWebService = webService.getMyWebServicePort ();

    webService.run («XYZ»);

Как мне ни печально, он отлично работает, когда я использую его в отдельном приложении. Но ... когда я пытаюсь получить доступ к веб-сервису таким же образом, но из сервлета-клиента, используя сгенерированные заглушки, я получаю следующую ошибку:

java.lang.ClassCastException: com.sun.xml.bind.v2.runtime.JAXBContextImpl cannot be cast to com.sun.xml.bind.api.JAXBRIContext
org.jboss.ws.metadata.umdm.EndpointMetaData.eagerInitializeAccessors(EndpointMetaData.java:686)
org.jboss.ws.metadata.umdm.EndpointMetaData.initializeInternal(EndpointMetaData.java:567)
org.jboss.ws.metadata.umdm.EndpointMetaData.eagerInitialize(EndpointMetaData.java:553)
org.jboss.ws.metadata.builder.jaxws.JAXWSClientMetaDataBuilder.rebuildEndpointMetaData(JAXWSClientMetaDataBuilder.java:314)
org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.getPortInternal(ServiceDelegateImpl.java:271)
org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.getPort(ServiceDelegateImpl.java:202)
javax.xml.ws.Service.getPort(Service.java:143...

Я долго искал в Google, но ничего полезного не нашел. В некоторых темах показаны примеры доступа к веб-сервисам из сервлета, но, к сожалению, я не могу этого сделать ... (И не знаю, в чем проблема.

Сервер приложений: jboss 4.2.3GA

Можно ли подключить веб-сервис из сервлета? Как?

Я пробовал использовать аннотацию @WebServiceRef, но похоже, что веб-контейнер не может вводить заглушку веб-службы. И я думаю, что контейнер не должен делать этого сам, потому что классы-заглушки уже были сгенерированы инструментом wsimport, и достаточно использовать эти классы для доступа к веб-сервису.

Классы-заглушки были созданы с помощью следующей команды:

wsimport -keep -p com.myhost.ws http://www.myhost.com/services/MyWebService?wsdl

person Zaur_M    schedule 19.01.2010    source источник
comment
нашел этот jax-ws.dev.java.net/guide/Using_JAX_WS_2_1_with_JavaSE6.html может в этом корень проблемы, проверю ...   -  person Zaur_M    schedule 19.01.2010
comment
Какую версию java вы используете? Какая версия JAX-WS RI? Вы используете JAX-RI в своей войне?   -  person Pascal Thivent    schedule 19.01.2010
comment
1. jdk 1.6.0_13 2. если RI - «удаленный интерфейс», то я не знаю, как определить его версию 3. да, RI тоже упакован   -  person Zaur_M    schedule 19.01.2010
comment
Я видел это исключение, но только когда WS возвращает пустой ответ.   -  person    schedule 27.05.2013


Ответы (3)


Вы удостоверились, что ваш путь к классам не содержит нескольких JAX-B Jar-файлов с разными версиями? Исключение мне кажется конфликтом версий. Серверы приложений обычно имеют своего рода «одобренный» каталог lib, в котором хранятся файлы JARS, которые всегда добавляются перед путями к классам веб-приложений. Может быть, на вашем сервере приложений есть конфликтующая реализация JAX-B?

Если вы используете Maven для упаковки своего приложения, убедитесь, что транзитивные зависимости не втягивают нежелательные JAX-B Jar (используйте «mvn dependency: tree», чтобы проверить это).

person JavaGuy    schedule 19.01.2010

Для меня это определенно звучит как конфликт JAXB. Проверьте версии jaxb, которые у вас есть на войне, и убедитесь, что они не конфликтуют с jaxb jar, который Jboss может иметь в своем каталоге lib.

person elduff    schedule 03.03.2010
comment
Решена эта проблема, удалив библиотеку jboss-jaxws.jar из каталогов $ JBOSS_HOME / server / default / lib и $ JBOSS_HOME / lib / endorsed, эта ссылка была полезной: bluefishgroup.com/library/2007/ Большое спасибо за помощь! - person Zaur_M; 06.06.2011

Кроме того, если собственная библиотека jbossws была установлена ​​правильно, следующие пакеты следует удалить из каталога jboss_home / lib / endorsed:

  • jboss-jaxrpc.jar
  • jboss-jaxws-ext.jar
  • jboss-jaxws.jar
  • jboss-saaj.jar

В противном случае у вас не будет возможности подключиться к веб-сервису через EJB или сервлет.

person Zaur_M    schedule 11.07.2013