У меня есть веб-сервис, который хорошо работает, когда я получаю доступ к ним от J2SE (рабочий стол) приложение. Для доступа к этому сервису, я действительно следую:
затем я создаю сервис с помощью сгенерированных классов и выполняю одну из wsdl операций. Это похоже на это:
Веб-сервис MyWebServiceService = новый 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 инструментом и его enouph для использования этого классы для доступа веб-сервиса.
Тупиковые классы были сгенерированы с помощью следующей команды:
wsimport -keep -p com.myhost.ws http://www.myhost.com/services/MyWebService?wsdl
Вы убедились, что ваш класс не содержит нескольких банок JAX-B с разными версиями? Исключение выглядит как версия конфликта для меня. Серверы приложений обычно имеют какой-то «одобренный» каталог Lib, который содержит банки, которые всегда добавляются перед классными тратпами веб-приложений. Возможно, ваш сервер приложений имеет конфликтующую реализацию JAX-B?
Если вы используете Maven для пакета вашего приложения, убедитесь, что переходные зависимости не тянут в нежелательных JAX-B JAS (используйте «MVN-зависимость: дерево», чтобы проверить это ).
Для меня это определенно похоже на конфликт JAXB. Проверьте версии jaxb, которые у вас есть в вашей войне, и убедитесь, что они не конфликтуют с jaxb jar, который Jboss может иметь в своем каталоге lib.