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