0

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

任何帮助,将不胜感激。

4

3 回答 3

0

I think the problem is in mapping the soap fault xml to its corresponding object.

于 2010-11-09T03:57:51.697 回答
0

它显然没有将 'xml:lang=""' 视为属性。检查您的 xsd 或 xmlSchema 哪些属性是有效的。你也应该使用

xml:lang=&quot;&quot;

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

于 2010-11-09T03:52:23.843 回答
0

事实证明,这个问题与我用来向 Web 服务请求返回静态字符串响应的工具有关。静态响应 XML 包含 xml:lang 属性。但是,当该工具返回静态字符串时,它会在退出时对其进行修改,并将 xml:lang 即时替换为等效的完全限定名称空间 {http://www.w3.org/XML/1998/命名空间}lang。收到此响应时,SAXParser 因无法解释完全限定的等价物而窒息。

返回静态响应的工具使用 Groovy xml 解析器作为发送响应的一个组成部分。XmlParser Groovy 类有一个构造函数,我必须更改它以将验证和 namespaceAware 属性设置为 false。因此,该工具现在调用 XmlParser(false, false),而不是 XmlParser()。问题解决了。感谢您的回复。

于 2010-11-12T00:41:50.080 回答