我在 SOAP 响应验证上遇到了一个奇怪的问题。我已经将响应和 XSD 降低到重现错误所需的最低限度。XSD:
<?xml version="1.0"?>
<xs:schema targetNamespace="http://peoplesoft.com/rootResponse" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="ReturnID" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
SOAP 响应:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<root xmlns="http://peoplesoft.com/rootResponse">
<ReturnID />
</root>
</soapenv:Body>
</soapenv:Envelope>
如果我在 soapUI 中验证原始响应,它会在元素 root@http://peoplesoft.com/rootResponse 中显示预期元素“ReturnID”而不是“ReturnID@http://peoplesoft.com/rootResponse”。
当我在 Visual Studio 2012 中加载上述文件时(是的,我确实告诉 Visual Studio 使用此 XSD 文件来验证命名空间),我得到这个:命名空间'http://peoplesoft.com/rootResponse 中的元素'root' ' 在命名空间 'http://peoplesoft.com/rootResponse' 中有无效的子元素 'ReturnID'。预期的可能元素列表:'ReturnID'。
在这两种情况下,它都会对ReturnID元素大喊大叫,但它说它需要ReturnID元素?