我正在尝试在Eclipse Galileo中运行的junit测试中读取Web服务调用的响应。除非响应是SOAP错误,否则我能够成功接收响应。然后我得到以下异常: org.xml.sax.SAXParseException:元素类型“SOAP:Text”必须后跟任何属性规范,“>”或“/>”
我已经针对SOAP 1.2架构验证了LiquidXML Studio中的XML,并检查了它。
这是SAX似乎令人窒息的XML响应。为了消除任何明显的东西(我甚至确定它没有任何自闭元素),它被剥离到最小值:
<SOAP:Envelope xmlns:SOAP="http://www.w3.org/2003/05/soap-envelope" xmlns:SOAP_ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP:Header>
</SOAP:Header>
<SOAP:Body>
<SOAP:Fault>
<SOAP:Code>
<SOAP:Value>SOAP:Sender</SOAP:Value>
<SOAP:Subcode>
<SOAP:Value>SOAP:Sender</SOAP:Value>
</SOAP:Subcode>
</SOAP:Code>
<SOAP:Reason>
<SOAP:Text xml:lang="">
</SOAP:Text>
</SOAP:Reason>
<SOAP:Node>
</SOAP:Node>
<SOAP:Role>
</SOAP:Role>
<SOAP:Detail>
</SOAP:Detail>
</SOAP:Fault>
</SOAP:Body>
</SOAP:Envelope>
任何帮助都将不胜感激。
答案 0 :(得分:0)
它显然没有将'xml:lang =“”作为属性进行注册。与您的xsd或xmlSchema一起查看哪些属性有效。你也应该使用
xml:lang=""
而不是“”,尽管大多数解析器会原谅你。
答案 1 :(得分:0)
我认为问题在于将soap fault xml映射到其对应的对象。
答案 2 :(得分:0)
事实证明,问题与我用来将静态字符串响应返回给Web服务请求的工具有关。静态响应XML包含xml:lang属性。但是,当工具返回静态字符串时,它在出路时修改它并使用完全限定的命名空间等效替换xml:lang {http://www.w3.org/XML/1998/命名空间}郎。收到此回复后,SAXParser因为无法解释完全合格的等效而导致窒息。
返回静态响应的工具使用Groovy xml解析器作为发送响应的组成部分。 XmlParser Groovy类有一个构造函数,我必须将其更改为将validating和namespaceAware属性设置为false。因此,该工具不是使用XmlParser(),而是调用XmlParser(false,false)。 问题解决了。 感谢您的回复。