Java SAXParseException:前缀为;xsi“;对于属性“;xsi:schemaLocation“;不受约束
当我试图从部署到WebSphere 7.0的类调用WebService(HP Service Manager,如果它有帮助的话)时,我遇到了错误。当我从JUnit代码调用它时,相同的代码函数 WSDL的片段是:Java SAXParseException:前缀为;xsi“;对于属性“;xsi:schemaLocation“;不受约束,java,xml,web-services,wsdl,websphere,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/wsd
<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/">
我认为XML解析器总是知道xmlns:xsi
,所以我不理解这个错误。为什么在WebSphere上会发生这样的错误,而在JUnit中使用com.ibm.ws.webservices.thinclient
启动代码时不会发生这样的错误
适当的StackTrace片段是:
原因:javax.wsdl.WSDLException:WSDLException:
faultCode=PARSER\u错误:解析问题
'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 attribute
“xsi:schemaLocation”,das einem Elementtyp“definitions”zugeordnet
是的,是的。
在
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 attribute“xsi:schemaLocation”,作为元素类型
“定义”指的是祖格奥尔德内,而不是格本登。在
org.apache.xerces.parsers.DOMParser.parse(未知源代码)位于
org.apache.xerces.jaxp.DocumentBuilderImpl.parse(未知源代码)位于
com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2245)
... 56多
错误可能不是源于WSDL,而是源于从Web服务返回的XML。您可能希望了解返回的XML的确切内容,并检查
xsi
名称空间在文档中是否正确绑定
除此之外,每个解析器实例(服务器与JUnit)的配置可能存在细微差异,这会导致一个解析器拒绝未绑定的名称空间,而另一个解析器只是忽略解析的XML中的这个“小故障”。(例如,请参阅apache解析器。)该错误的意思正是它所说的:xsi前缀没有名称空间声明
XML解析器对这个名称空间没有内置的知识,这是不对的。需要声明它以使文档名称空间格式良好。尝试将其包含在定义标记xmlns=”“中。也请检查它是否为不完整的标记定义,xmlns是presentOops。错过了错误消息的那一部分:o)刚刚读到“当我尝试调用WebService时出错”,所以我假设错误来自调用本身。WSDL的这一部分似乎验证得很好。-您确定您在本地和服务器上使用了相同的WSDL文件吗?是的,这是来自服务器的stacktrace,它正在从jar文件读取(只有路径和名称是匿名的)。我似乎理解这一点,但是我假设您不会从JUnit测试中部署在服务器上的同一jar访问相同的文件。可能您在服务器上和单元测试设置中分别部署了该文件的不同版本?不,我只有一个版本,只有一个不同,我已经将xsd文件名从小写改为camelcase,因为它在WSDL中被如此引用。但在JUnit中,这被忽略了,所以我认为使用了DocumentFactory/SaxParser/whatever的另一个版本,但在封闭源代码技术中,很难说发生了什么。然而,在OP的XML代码片段中,
xsi
前缀实际上是绑定的:“xmlns:xsi=”“”。。。