3

当我尝试从部署到WebSphere 7.0 的类中调用 WebService(HP 服务管理器,如果有帮助的话)时出现错误。当我从 JUnit 代码调用它时,相同的代码功能......

WSDL 的片段是:

<definitions targetNamespace="http://schemas.hp.com/SM/7"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.xmlsoap.org/wsdl/  http://schemas.xmlsoap.org/wsdl/">

我认为xmlns:xsiXML 解析器总是知道的,所以我不明白那个错误。为什么在 WebSphere 上会出现这样的错误,而在 JUnit 中使用启动代码时不会出现这种错误com.ibm.ws.webservices.thinclient

适当的 StackTrace 片段是:

引起:javax.wsdl.WSDLException:WSDLException:faultCode=PARSER_ERROR:解析 'wsjar:file:/path/to/ear.ear/war.war/WEB-INF/lib/my_jar-0.0.1-SNAPSHOT.jar 的问题!/wsdl/myWsdl.wsdl'.: org.xml.sax.SAXParseException: Das Präfix "xsi" für Attribut "xsi:schemaLocation", das einem Elementtyp "definitions" zugeordnet ist, ist nicht gebunden。在 com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2255) 在 com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2330) 在 com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL (WSDLReaderImpl.java:2296) 在 org.apache.axis2.jaxws.util.WSDL4JWrapper$13.run(WSDL4JWrapper.java:745) 在 org.apache.axis2.java.security.AccessController.doPrivileged(AccessController.java:132)在 org.apache.axis2.jaxws.util.WSDL4JWrapper。loadDefinition(WSDL4JWrapper.java:742) ... 51 更多原因:org.xml.sax.SAXParseException: Das Präfix "xsi" für Attribut "xsi:schemaLocation", das einem Elementtyp "definitions" zugeordnet ist, ist nicht gebunden。在 org.apache.xerces.parsers.DOMParser.parse(Unknown Source) 在 org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) 在 com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2245 ) ... 56 更多

4

2 回答 2

3

该错误的含义正是它所说的:xsi 前缀没有命名空间声明。

XML 解析器并不具备此名称空间的内置知识。需要声明它以使文档命名空间格式正确。

于 2013-05-22T11:31:07.873 回答
2

该错误可能不是源于 WSDL,而是源于从 WebService 发回的 XML。您可能想看一下究竟返回了什么 XML,并检查xsi名称空间是否在文档中正确绑定。

除此之外,每个解析器实例(服务器与 JUnit)的配置可能存在细微差别,这会导致一个解析器拒绝未绑定的命名空间,而另一个则忽略解析的 XML 中的这个“故障”。(例如,请参见apache 解析器的setNamespaces()。)

于 2013-05-22T11:30:43.723 回答