【问题标题】:Disallow empty elements in XSD禁止 XSD 中的空元素
【发布时间】:2016-11-02 09:16:43
【问题描述】:

我有一个用 Axis2 用 Ja​​va 构建的 SOAP Web 服务,请求中的几个元素不能为空。例如我可以验证最小长度,但我也有不应为空的日期和布尔值。如何在 XSD 中验证这一点?

一个空的日期元素通过模式验证并在 Java 层中给我一个空日期。我可以检查它是否不为空,如果不是,我的日期之一是可选的,如果元素为空,我必须返回错误,而不是将其视为丢失。

对于可选元素,Axis2 生成的类提供了一个 'isThisElementSpecified()' 方法,但在元素映射到 Object 的情况下,如果元素为空,则返回 false,因此我无法区分由于为空的 null 和缺少元素。

空的布尔元素也通过了模式验证,我在 Java 层得到了“假”。更糟糕的是,尽管这些元素是可选的,但 isThisElementSpecified() 方法对于映射到原始元素的空元素返回 true,因此我什至不能将它们视为元素不存在(如果只有一个,则必须默认为 true)未指定)。

所有这些元素在 XSD 中都是 nillable="false"。布尔值有一个默认值,但没有效果(我读到“默认”仅适用于属性)。

我找到了很多关于如何接受空日期元素的答案,这表明正常行为是它无法按照我的意愿进行架构验证,但这里没有这样做.

编辑:关于不允许空元素的现有问题表明 minLength=1 限制,但这些数据类型不允许这样做。

我的 XSD 的相关位:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:tns="http://www.my.company.com/project" 
           targetNamespace="http://www.my.company.com/project" 
           elementFormDefault="qualified" 
           attributeFormDefault="unqualified">
  <xs:element name="fooRequest">
    <xs:complexType>
      <xs:sequence>
        <!--snip some stuff-->
        <xs:element name="startDate" type="xs:date" 
                    nillable="false" minOccurs="0" />
        <!--snip-->
        <xs:element name="includeBar" type="xs:boolean" 
                    default="true" nillable="false" minOccurs="0" />
        <!--snip-->
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

【问题讨论】:

  • @TomRedfern 该问题仅提及字符串元素,建议的答案是将长度限制为至少 1 - 正如我所提到的,我知道字符串的解决方案。日期或布尔值不允许这种类型的限制。
  • 哪个验证器接受 &lt;startDate/&gt; 对该架构有效?您是否针对它提出了错误报告?
  • @C.M.Sperberg-McQueen 经过进一步调查,我了解到 Axis2 不会针对架构进行验证,除非您包含此 Web 服务没有的特定模块。所以……没有。模式仅用于生成 Java 类,其中包括对显式限制的验证,但通常不用于验证元素是否为空。正确的解决方案是使用验证模块,但由于我无法控制的情况,这不是一个选项。

标签: java validation xsd axis2


【解决方案1】:

排序!事实证明,虽然 minLength 仅适用于字符串,但“模式”限制可以用于任何基本类型。 &lt;xs:pattern value=".+" /&gt; 将元素限制为非空。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多