Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SAXParseException:前缀为;xsi“;对于属性“;xsi:schemaLocation“;不受约束_Java_Xml_Web Services_Wsdl_Websphere - Fatal编程技术网

Java SAXParseException:前缀为;xsi“;对于属性“;xsi:schemaLocation“;不受约束

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

当我试图从部署到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/">

我认为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=”“”。。。