验证SOAP消息

时间:2009-08-03 04:28:21

标签: xml soap validation

我无法将任何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>

4 个答案:

答案 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获得,但这只是约定,而不是要求。