SAXParseException:元素类型SOAP:Text必须后跟属性规范,“>”或“/>”

时间:2010-11-09 03:40:07

标签: exception soap sax fault

我正在尝试在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>

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

它显然没有将'xml:lang =“”作为属性进行注册。与您的xsd或xmlSchema一起查看哪些属性有效。你也应该使用

xml:lang=&quot;&quot;

而不是“”,尽管大多数解析器会原谅你。

答案 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)。 问题解决了。 感谢您的回复。