的文档required 表示:



的文档nillable 表示:


xs:complexType的代码:

public class WSData {
    //...

    @XmlElement(required = true, nillable = false)
    public void setMonth(XmlMonthType month) {
        this.month = month;
    }

    public void setUserLogin(String userLogin) {
        this.userLogin = userLogin;
    }
}
xs:simpleType的代码:
@XmlType
@XmlEnum(Integer.class)
public enum XmlMonthType {
    @XmlEnumValue("1")
    JANUARY,
    @XmlEnumValue("2")
    FEBRUARY,
    @XmlEnumValue("3")
    MARCH,
    /* ... months 4 ~9 ... */
    @XmlEnumValue("10")
    OCTOBER,
    @XmlEnumValue("11")
    NOVEMBER,
    @XmlEnumValue("12")
    DECEMBER;
}

生成的XML模式:
<xs:complexType name="wsData">
  <xs:sequence>
    <xs:element name="month" type="xs:string"/>
    <xs:element minOccurs="0" name="userLogin" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

<xs:simpleType name="xmlMonthType">
  <xs:restriction base="xs:int">
    <xs:enumeration value="1"/>
    <xs:enumeration value="2"/>
    <xs:enumeration value="3"/>
    <!-- ... months 4 ~9 ... -->
    <xs:enumeration value="10"/>
    <xs:enumeration value="11"/>
    <xs:enumeration value="12"/>
  </xs:restriction>
</xs:simpleType>

事实:
  • min的默认值是。因此,需要月份(必须存在)。
  • 本月有限制。因此,month只能具有由12个定义的枚举之一定义的值。
  • 可设置的的默认值为false。因此,month不能为空值;
  • XML架构已正确生成。

  • 问题:
  • 接受月份的abcense(必须不存在);
  • 它接受月的任何值,例如13(不可解析为Integer的情况除外);
  • 它接受空值;

  • 我没想到这些问题,我错过了什么吗?
    如果该行为是正确的,那么 required nillable xs:restriction 的目的是什么?

    最佳答案

    Nillable允许空值。例如,如果您有一个Integer或Date,则为Nillable,则XML标签可以为空。如果不是必需的,但不是必需的,则XML元素要么必须存在有效​​内容,要么根本不存在。空标签无效。

    10-08 18:15