有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您的第一个输入缺少<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" />