如何在WSDL中创建限制为< |< = |> |> =的有效模式

时间:2010-05-25 22:27:15

标签: wsdl xsd soapui

这是我在WSDL的schema部分中指定字段必须是比较运算符

的内容
                <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                            <xsd:pattern value="&lt;|&gt;|&lt;=|&gt;=|="/>
                        </xsd:restriction>
                </xsd:simpleType>

SoapUI抱怨WSDL的这一部分,我试图将值设置为具有非特殊字符的东西,并且WSDL是有效的。所以我试着将整个长字符串替换为 值= “&GT; gt;” 中并且它有效但值=“&lt; lt;”无效,而值=“&gt;”也无效。我的问题是,为什么WSDL验证需要&gt;被双重逃脱?

主要问题是,如何在模式值内提供有效的小于。

2 个答案:

答案 0 :(得分:0)

这实际上可能是SoapUI中的一个错误。我尝试使用以下架构和XML与Apache Xalan(在Java中):

架构:

<schema xmlns="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.foo.com/"
  xmlns:tns="http://www.foo.com/"
  elementFormDefault="qualified">

  <element name="foo">
    <simpleType>
      <restriction base="string">
        <pattern value="&lt;|&gt;|&lt;=|&gt;=|="/>
      </restriction>
    </simpleType>
  </element>

</schema>

示例XML:

<foo xmlns='http://www.foo.com/'>&gt;</foo>

它验证正常。当我尝试这样做时:

<foo xmlns='http://www.foo.com/'>abc</foo>

我按预期收到以下错误:cvc-pattern-valid: Value 'abc' is not facet-valid with respect to pattern '<|>|<=|>=|=' for type '#AnonType_foo'.

我的建议是尝试使用枚举。例如:

<simpleType>
  <restriction base="string">
    <enumeration value="&lt;" />
    <enumeration value="&gt;" />
    <enumeration value="&lt;=" />
    <enumeration value="&gt;=" />
    <enumeration value="=" />
  </restriction>
</simpleType>

看看SoapUI是否更喜欢这个。希望这有帮助!

答案 1 :(得分:0)

我认为我解决了自己的问题,为什么要在模式中定义允许值之一

                        <xsd:restriction base="xsd:string">
                            <xsd:pattern value="=|&amp;gt;|&amp;gt;=|&amp;lt;|&amp;lt;=|&amp;lt;&amp;gt;|[Ii][Nn]|[Nn][Oo][Tt] [Ii][Nn]|[Ll][Ii][Kk][Ee]"/>
                        </xsd:restriction>