org.xml.sax.SAXParseException: Преждевременный конец файла. при разборе схемы

Я пишу клиент веб-сервиса, работающий на Linux JBoss 5.0.1/JBossWS Native 3.1.1, который вызывает службу, работающую на стеке Windows Tomcat 6.0.29/Metro.

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 я обнаружил, что InputStream, созданный из указанного XSD, имеет значение null. Обычно это указывает на предположение, что между клиентом и сервером существует какая-то проблема с сетью (или брандмауэром). Это все очень запутанно, так как у меня есть модульные тесты, работающие на той же машине, так что это не может быть из-за этого.


person bohnenquark    schedule 12.05.2011    source источник
comment
Вы можете wget WSDL на Linux-машине?   -  person artbristol    schedule 12.05.2011
comment
да. В результате я получаю действительную XML-схему.   -  person bohnenquark    schedule 12.05.2011
comment
см. результат здесь: pastie.org/1892168   -  person bohnenquark    schedule 12.05.2011
comment
Находитесь ли вы в корпоративной среде, где используется какой-либо прозрачный прокси, и настроен ли ваш JBoss с другой конфигурацией прокси? Будет ли это работать, если вы полностью определите имя сервера (server.company.com) в URL-адресе?   -  person artbristol    schedule 12.05.2011
comment
Здесь не используется проксирование, и я уже использую полное доменное имя сервера... к сожалению, это не так. Но продолжайте гадать, у меня закончились идеи :)   -  person bohnenquark    schedule 12.05.2011


Ответы (1)


Мне потребовалось довольно много времени, чтобы понять внутреннюю работу реализации WS, но теперь у меня есть решение.

Проблема заключается в собственном JBoss, который не может справиться с URL-адресами, созданными Metro. На данный момент моя проблема заключается в загрузке WSDL и XSD из моих локальных ресурсов и изменении адреса конечной точки на реальный адрес сервера вручную.

@artbristol, спасибо за помощь.

person bohnenquark    schedule 13.05.2011