java - 为什么 XSD 模式和 WSDL 模式之间存在差异?

标签 java xml 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 中完全相同的模式有效的内容之间存在差异吗?

最佳答案

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

相关文章:

java - SpringBoot OAuth2 自定义异常响应

java - 从文本文件中的特定行提取字符串

java - 使用 Guava 将 map 转换为对象?

java - Node.getChildNodes() 返回的额外对象是什么?

java - 我如何解码具有允许在 jibx 中使用多个枚举值的属性的 XML 文档?

xml - XSD发生指标的使用

java - 将 Java 方法调用链接和对象构造转换为普通的 Clojure

javascript - 单击 Odoo 10 中的 TreeView 字段时如何执行某些操作?

c# - 如何将 XMLDocument 反序列化为 C# 中的对象?

java - 根据运行时加载的 xml 模式序列化 java 对象