【问题标题】:Can XSD Assertions be Used in Specifying a WSDL FileXSD 断言能否用于指定 WSDL 文件
【发布时间】:2017-09-15 15:52:25
【问题描述】:

我有一个 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>

不幸的是,当我尝试在 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,所以我不知道它是 xsd 版本(1.0 与 1.1)问题还是其他问题。

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

编辑: 我已经添加了 wsdl 的标题。 我已将版本属性(version="1.1")添加到&lt;xs:schema&gt; 定义,但这也无济于事:

<xs:schema targetNamespace="http://www.xxx.yyy/reg/definitions" elementFormDefault="qualified" version="1.1">

【问题讨论】:

  • 我不确定这个问题是否有“真正好的答案”,因为在 WSDL 的文本中,对 XSD 的引用对于支持的版本非常模糊(在 w3.org/TR/wsdl20/#eii-types 中),而且它还指定(在第 3.2 节中)可以支持其他模式语言。但是,XML Schema 的参考建议是 1.0(在 §10.2 Normative references 中)。
  • @potame:确实很难找到答案,但无论如何,感谢您的支持和链接。
  • 如果没有&lt;xmlns:xs="..."&gt; 标签,这很难调试。可以包含 WSDL 的标头吗?
  • @saarp:请看一下问题的编辑部分(我已经添加了所需的部分)。
  • @Armine 当我在&lt;wsdl:definitions&gt; 标记中的xmlns:soapxmlns:wsdl 命名空间引用之间添加一个空格时,上述模式验证正确。您还可以尝试更新后的 wsdl 架构 URL w3.org/ns/wsdl

标签: java web-services tomcat xsd wsdl


【解决方案1】:

XMLSchema definition moved over to w3.org 时看起来像assertions were introduced with 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">

【讨论】:

  • 是的,Witt XSD v.1.1 已经引入了断言,所以如果我有一个 1.0 版的 XSD,我就不能使用断言。但我的问题是我是否可以将 XSD v.1.1 与 WSDL 一起使用?我已将版本属性 (version="1.1") 添加到 定义中,但这也无济于事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多