如何在WSDL文件中使用XML Schema 1.1?

时间:2017-01-25 15:13:11

标签: xml soap xsd wsdl schema

我有一个完全验证的现有XML模式(不是由我制作)(例如使用Oxygen XML Developer)。它使用XML Schema 1.1功能,因此定义了vc:minVersion="1.1" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"

但是,只要我将这个(复制到 not include / reference)嵌入到WSDL文件中,它就会在Oxygen XML Developer中失效。一旦我在WSDL文件中将vc:minVersion="1.1"更改为vc:minVersion="1.0",它就会验证,因为我也纠正了现在无效的1.1功能。

准确地说,这个超级简单的WSDL将验证:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://some.location.tld" xmlns:tns="http://some.location.tld" xmlns:objects="http://www.domain.tld" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <wsdl:types>
        <xs:schema targetNamespace="http://www.domain.tld" vc:minVersion="1.0" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="foobar" type="xs:string"/>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="someRequest">
        <wsdl:part name="parameter" element="objects:foobar"/>
    </wsdl:message>
    <wsdl:message name="someResponse">
        <wsdl:part name="parameter" element="objects:foobar"/>
    </wsdl:message>
    <wsdl:portType name="somePortType">
        <wsdl:operation name="get">
            <wsdl:input message="tns:someRequest"/>
            <wsdl:output message="tns:someResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="someSoapHttpBinding" type="tns:somePortType">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="get">
            <soap:operation soapAction=""/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="some">
        <wsdl:port name="somePort" binding="tns:someSoapHttpBinding">
            <soap:address location="https://some.location.tld"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

只有将vc:minVersion="1.0"更改为vc:minVersion="1.1"后,它才会变为无效。

所以问题是,如何正确定义包含嵌入式XSD 1.1架构的WSDL?这是Oxygen XML Developer(版本17)中的错误吗?哪些工具应该支持它?也许Altova XMLSpy?

我是否可能必须使用WSDL 2.0来使用嵌入式XSD 1.1模式?至少gsoap在他们的主页上提到完全支持XSD 1.1 - 这必须意味着可以存在具有XSD 1.1的WSDL。

* 帮助*

[edit]澄清一下:简单地使用XML Schema 1.0并解决1.1功能是选项。

0 个答案:

没有答案