веб-клиент для веб-сервиса - PullRequest
7 голосов
/ 19 января 2010

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

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

    MyWebServiceService webService = new MyWebServiceService ();

    MyWebService port = 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

Ответы [ 3 ]

10 голосов
/ 19 января 2010

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

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

1 голос
/ 11 июля 2013

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

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

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

1 голос
/ 03 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...