我有 WSDL,其中架构部分是:
<wsdl:types>
<xs:schema>
<!-- input schema -->
<xs:element name="vs_ss_list" type="vsSsList" />
<xs:element name="vs_ss" type="vsSs" />
<xs:complexType name="vsSsList">
<xs:sequence maxOccurs="unbounded">
<xs:element ref="vs_ss" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="vsSs">
<xs:sequence>
<xs:element name="vs" type="xs:string" />
<xs:element name="ss" type="xs:string" />
</xs:sequence>
</xs:complexType>
<!-- output schema -->
.
.
.
</xs:schema>
</wsdl:types>
如果验证从此类架构创建的相反 XSd,则此输入没问题:
<vs_ss_list>
<vs_ss>
<vs>123</vs>
<ss>fgh</ss>
</vs_ss>
<vs_ss>
<vs>456</vs>
<ss>jkl</ss>
</vs_ss>
但是如果测试正在运行的 Web 服务,则需要此 SOAP 信封才能运行:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<vs_ss_list>
<vs_ss>
<vs_ss>
<vs>123</vs>
<ss>fgh</ss>
</vs_ss>
<vs_ss>
<vs>123</vs>
<ss>fgh</ss>
</vs_ss>
</vs_ss>
</vs_ss_list>
</soapenv:Body>
</soapenv:Envelope>
出于某种未知的原因,它需要比验证 XSD 多一个元素。
知道为什么对 XSD 有效的内容与对 WSDL 中完全相同的模式有效的内容之间存在差异吗?
最佳答案
您的第一个输入缺少 <vs_ss_list>
的结束标记.
假设在末尾添加了该内容,则 xml 仍然无效,因为您的 XSD 需要两个元素。
...
<xs:element name="vs_ss_list" type="vsSsList" />
<xs:element name="vs_ss" type="vsSs" />
...
第一个是您的列表,第二个是单个 vsSs
.
尝试删除<xs:element name="vs_ss" type="vsSs" />
.
关于java - 为什么 XSD 模式和 WSDL 模式之间存在差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51590702/