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