当我尝试从部署到 WebSphere 7.0的类调用WebService(HP-Service Manager,如果它会提供帮助)时,我收到错误。当我调用它时,相同的代码函数来自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:xsi
始终知道XML解析器,所以我不明白这个错误。为什么在WebSphere上发生此类错误,而使用com.ibm.ws.webservices.thinclient
在JUnit中启动代码时却不会发生错误?
适当的StackTrace片段是:
引起:javax.wsdl.WSDLException:WSDLException: faultCode = PARSER_ERROR:解析问题 'wsjar的:文件:/path/to/ear.ear/war.war/WEB-INF/lib/my_jar-0.0.1-SNAPSHOT.jar /wsdl/myWsdl.wsdl': org.xml.sax.SAXParseException:DasPräfix“xsi”fürAttribut “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:DasPräfix “xsi”fürAttribut“xsi:schemaLocation”,das einem Elementtyp “定义”zugeordnet ist,ist nicht gebunden。在 org.apache.xerces.parsers.DOMParser.parse(未知来源)at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(未知来源)at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2245) ......还有56个
答案 0 :(得分:3)
错误意味着它所说的内容:xsi前缀没有名称空间声明。
XML解析器不具备此命名空间的内置知识。需要声明它才能使文档命名空间格式良好。
答案 1 :(得分:2)
错误可能不是来自WSDL,而是来自WebService发回的XML。您可能希望了解返回的XML,并检查xsi
命名空间是否在文档中正确绑定。
除此之外,每个解析器实例(服务器与JUnit)的配置可能只是一个微小的差别,导致一个解析器拒绝未绑定的命名空间,而另一个解析器只是忽略解析的XML中的“故障” 。 (例如,参见apache解析器的setNamespaces()。)