可以在指定WSDL文件时使用XSD断言

Arm*_*ine 5 java xsd tomcat wsdl web-services

我有一个WSDL文件,其中还包含其中使用的所有类型(通过<wsdl:types> 标记).在定义类型时,我有这样的事情:

<wsdl:definitions name="service"
        targetNamespace="http://www.xxx.yyy/reg/definitions" xmlns="http://schemas.xmlsoap.org/wsdl/"
        xmlns:tax="http://www.xxx.yyy/reg/definitions" xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    .............
    <xs:complexType name="CompanyName">
        <xs:sequence>
            <xs:element name="Name" type="xs:string" />
            <xs:element name="ShortName" type="xs:string" minOccurs="0" />
        </xs:sequence>
        <xs:attribute name="Language" type="tax:LanguageType" use="required"/>
        <xs:assert test="ShortName or @Language != 'Language1'"/>
    </xs:complexType>
    .............
</wsdl:definitions>
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试在Tomcat上启动应用程序时,它无法提供以下异常:

javax.xml.ws.WebServiceException: org.xml.sax.SAXParseException; s4s-elt-invalid-content.1: The content of 'CompanyName' is invalid.  Element 'assert' is invalid, misplaced, or occurs too often.
Run Code Online (Sandbox Code Playgroud)

WSDL版本是1.2,我不知道在其中描述类型时它使用哪个版本的xsd,所以我不知道它是xsd版本(1.0对1.1)问题还是别的.

有人可以帮助我找到真正的问题吗?

编辑:我添加了wsdl的标题.我已将version attribute(version="1.1")添加到<xs:schema> 定义中,但这也没有帮助:

<xs:schema targetNamespace="http://www.xxx.yyy/reg/definitions" elementFormDefault="qualified" version="1.1">
Run Code Online (Sandbox Code Playgroud)

saa*_*arp 0

看起来断言是在XMLSchema 定义移至 w3.org随 XML Schema v1.1 引入的

示例标题:

<wsdl:description
  targetNamespace="http://www.w3.org/2002/ws/sawsdl/spec/wsdl/order#"
  xmlns="http://www.w3.org/2002/ws/sawsdl/spec/wsdl/order#"
  xmlns:wsdl="http://www.w3.org/ns/wsdl"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:sawsdl="http://www.w3.org/ns/sawsdl">
Run Code Online (Sandbox Code Playgroud)