XSD断言是否可以用于指定WSDL文件?

5
我有一个WSDL文件,其中还包含所有使用的类型(通过标签)。在定义类型时,我有类似于以下内容:
<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>

很遗憾,当我试图在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.

WSDL版本为1.2,其中类型的描述使用了xsd,但我不知道它使用的是哪个版本(1.0还是1.1),因此我不确定问题是否出在xsd版本上。请问有人能帮我找到真正的问题吗?已经附上wsdl头部信息,我已将定义中的version属性(version="1.1")加入,但仍然没有解决问题。
<xs:schema targetNamespace="http://www.xxx.yyy/reg/definitions" elementFormDefault="qualified" version="1.1">

1
我不确定这个问题是否有一个“真正好的答案”,因为在WSDL文本中,对于支持的版本,对XSD的引用相当模糊(在https://www.w3.org/TR/wsdl20/#eii-types中),并且还指定(在§3.2)其他模式语言可能被支持。然而,XML Schema的推荐参考是1.0(在§10.2规范参考中)。 - potame
@potame:真的很难找到答案,但无论如何,感谢您的支持和提供的链接。 - Armine
没有 <xmlns:xs="..."> 标签,这很难调试。你能包含 WSDL 的头吗? - saarp
@saarp:请看一下问题的编辑部分(我已经添加了所需的部分)。 - Armine
@Armine 当我在 <wsdl:definitions> 标签中的 xmlns:soapxmlns:wsdl 命名空间引用之间添加一个空格时,上面的模式可以正确验证。您还可以尝试更新后的 WSDL 模式 URL:http://www.w3.org/ns/wsdl。 - saarp
@saarp:抱歉,缺少的空格只是在StackOverflow中复制粘贴和格式化时犯的一个笔误...我已经纠正了它。但真的很奇怪它竟然能够通过验证。在我的环境中,Tomcat启动时会报错。 - Armine
1个回答

0

看起来 XML Schema v1.1 引入了断言,当XMLSchema 定义移动到 w3.org 时。

示例标题:

<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">

是的,断言已经在XSD v.1.1中引入,因此如果我有一个版本为1.0的XSD,则无法使用断言。但我的问题是,我是否可以在WSDL中使用XSD v.1.1?我已将版本属性(version="1.1")添加到xs:schema定义中,但这也没有帮助。 - Armine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接