java为什么XSD模式和WSDL模式之间存在差异?
我有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中完全相同的模式之间存在差异吗
# 1 楼答案
您的第一个输入缺少
<vs_ss_list>
的结束标记假设这是在最后添加的,那么xml仍然无效,因为XSD需要两个元素
第一个是您的列表,第二个是单个
vsSs
尝试删除
<xs:element name="vs_ss" type="vsSs" />