#web-services #jboss #jax-ws #java-metro-framework #jbossws
#веб-службы #jboss #jax-ws #java-metro-framework #jbossws
Вопрос:
Я пишу клиент веб-сервиса, работающий на Linux JBoss 5.0.1 / JBossWS Native 3.1.1, который вызывает службу, работающую на Windows Tomcat 6.0.29 / Metro Stack.
WSDL-файлы и XSD-файлы, на которые есть ссылки, доступны через браузер, а также тесты JUnit, которые я написал, работают просто отлично. Но когда клиент запущен внутри JBoss, я получаю следующую трассировку стека:
Caused by: org.jboss.ws.metadata.wsdl.WSDLException: javax.wsdl.WSDLException: WSDLException (at /definitions/types/xsd:schema): faultCode=PARSER_ERROR: Problem parsing 'http://server:8280/ValueListService/?xsd=1'.: org.xml.sax.SAXParseException: Premature end of file.
at org.jboss.ws.tools.wsdl.WSDLDefinitionsFactory.parse(WSDLDefinitionsFactory.java:152)
at org.jboss.ws.metadata.umdm.ServiceMetaData.getWsdlDefinitions(ServiceMetaData.java:293)
at org.jboss.ws.metadata.builder.jaxws.JAXWSClientMetaDataBuilder.buildMetaData(JAXWSClientMetaDataBuilder.java:84)
at org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.<init>(ServiceDelegateImpl.java:138)
at org.jboss.ws.core.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:63)
at javax.xml.ws.Service.<init>(Service.java:79)
at javax.xml.ws.Service.create(Service.java:96)
at ...
При отладке реализации JBossWS WSDL я обнаружил, что входной поток, который создается из XSD, на который ссылается, равен нулю. Обычно это указывает мне на предположение, что существует какая-то проблема с сетью (или брандмауэром) между клиентом и сервером. Все это очень запутанно, поскольку у меня модульные тесты запущены на том же компьютере, так что это не может быть из-за этого.
Комментарии:
1. Вы можете
wget
использовать WSDL на компьютере с Linux?2. ДА. В результате я получаю действительную XML-схему.
3. смотрите результат здесь: pastie.org/1892168
4. Находитесь ли вы в корпоративной среде, которая выполняет какой-либо прозрачный прокси-сервер, и настроен ли ваш JBoss с другой конфигурацией прокси-сервера? Работает ли это, если вы полностью указываете имя сервера (server.company.com ) внутри URL?
5. Здесь не выполняется проксирование, и я уже использую полное доменное имя сервера… к сожалению, это не так. Но продолжайте гадать, у меня закончились идеи 🙂
Ответ №1:
Мне потребовалось довольно много времени, чтобы понять внутреннюю работу реализации WS, но теперь у меня есть решение.
Проблема заключается в встроенном JBoss, который не может справиться с URL-адресами, сгенерированными Metro. На данный момент я беспокоюсь о загрузке WSDL и XSD с моих локальных ресурсов и изменении адреса конечной точки на реальный адрес сервера вручную.
@artbristol, спасибо за вашу помощь.