“org.xml.sax.SAXParseException:文件过早结束。”在解析模式时

时间:2011-05-12 07:45:19

标签: web-services jboss jax-ws java-metro-framework jbossws

我正在编写一个运行在Linux JBoss 5.0.1 / JBossWS Native 3.1.1上的Web服务客户端,它调用在Windows Tomcat 6.0.29 / Metro Stack上运行的服务。

WSDL和引用的XSD文件可以通过浏览器访问,我编写的JUnit测试工作也很好。但是当客户端在JBoss中运行时,我得到以下stacktrace:

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创建的InputStream为null。这通常指向我的假设,即客户端和服务器之间存在某种网络问题(或防火墙)。这一切都非常令人困惑,因为我在同一台机器上运行了单元测试,所以它不能因此而存在。

1 个答案:

答案 0 :(得分:0)

我花了很长时间才了解WS实现的内部工作原理,但我现在得到了一个解决方案。

问题在于JBoss native,它无法处理Metro生成的URL。我现在的讨论是从本地资源加载WSDL和XSD并手动将端点地址更改为真实服务器地址。

@artbristol,谢谢你的帮助。