我无法将任何SOAP消息验证为有效的XML。例如,我将下面的SOAP消息从维基百科中删除,但Validome validator失败了。 验证器是错误的还是SOAP文件中有错误? 如果验证者错了你能建议另一个吗?它应该考虑模式。例如,W3C表示this xml格式正确,但实际上它确实非常无效,正如Validome正确指出的那样。
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<soapenv:Header>
<wsa:ReplyTo>
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:From>
<wsa:Address>http://localhost:8080/axis2/services/MyService</wsa:Address>
</wsa:From>
<wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID>
</soapenv:Header>
<soapenv:Body>
<req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/">
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>
答案 0 :(得分:4)
以下SOAP消息验证:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<soapenv:Header>
<wsa:ReplyTo>
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:From>
<wsa:Address>http://localhost:8080/axis2/services/MyService</wsa:Address>
</wsa:From>
<wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID>
</soapenv:Header>
<soapenv:Body>
<req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/">
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>
答案 1 :(得分:3)
您发布的XML可能完全有效 - 如果您已指定用于验证它的模式的位置。
XML术语中的“有效”表示“根据一组XML模式有效”。在没有任何模式的情况下,有效性的概念毫无意义。
答案 2 :(得分:0)
我查看了验证器的输出并且它工作正常,您使用的SOAP消息是错误的。当然,它报告的错误就在那里。还有一些错误,验证者没有报告我曾怀疑过,如果发现SOAP消息有一个问题,它会解开下一个父元素并继续。
例如,<mod_eeduns/>
之后的下一个元素应该是<total_obligatedAmount/>
(我假设)已被<total_obligatedAmount_within_this_search/>
取代
如果你必须使用这个SOAP,我建议你创建自己的XSD,有各种工具可以从现有的Xml消息中生成它们。也联系网站并传递你发现的问题(使用微妙)对他们有用。如果你不必使用这项服务,那就更好了。
当你说W3C说它形成得很好时,我不确定你的意思。例如,元素名称..<eeParentDuns ></eeParentDuns>..
中包含空格以及它们不匹配的事实在任何形式的Xml中都无效,更不用说SOAP + XSD了。
答案 3 :(得分:0)
要确保SOAP消息看起来应该如何,应该针对该消息中引用的所有模式对其进行验证。在您的示例中,这是自定义命名空间(myService)的SOAP,WS-Addressing和模式。
SOAP和WS-Addressing的模式可以从也用于命名空间的URL获得,但这只是约定,而不是要求。