У меня есть веб-сервис, который отлично работает, когда я обращаюсь к ним из приложения J2SE (настольного). Чтобы получить доступ к этой услуге, я следую:
- сгенерировать классы-заглушки по ссылке wsdl с помощью инструмента java wsimport
затем я создаю сервис, используя сгенерированные классы, и запускаю одну из операций 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