SAXParseException:属性“xsi:schemaLocation”的前缀“xsi”未绑定

时间:2013-05-22 11:18:55

标签: java xml web-services wsdl websphere

当我尝试从部署到 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个

2 个答案:

答案 0 :(得分:3)

错误意味着它所说的内容:xsi前缀没有名称空间声明。

XML解析器不具备此命名空间的内置知识。需要声明它才能使文档命名空间格式良好。

答案 1 :(得分:2)

错误可能不是来自WSDL,而是来自WebService发回的XML。您可能希望了解返回的XML,并检查xsi命名空间是否在文档中正确绑定。

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