在xsd中定义枚举类型属性的默认值

时间:2015-09-01 05:01:24

标签: java xsd jaxb

在xsd中定义枚举类型时,我面临以下问题

我将枚举结构定义为:

<xsd:simpleType name="ProvServiceTypeEnumV1">
        <xsd:annotation>
            <xsd:documentation>
                <p>Service Types</p>
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="HOME" />
            <xsd:enumeration value="ORIGINAL" />
            <xsd:enumeration value="DESTINATION" />
            <xsd:enumeration value="WORKING" />
            <xsd:enumeration value="PROTECTING" />
            <xsd:enumeration value="NA" />
        </xsd:restriction>
    </xsd:simpleType>

现在我想在其他模型中使用此类型ProvServiceTypeEnumV1作为属性,默认值为“NA”,这意味着当我将此xsd转换为java模型时,默认值应始终为NA。

对于使用as:

实现的布尔类型
<xsd:element name="cktID" type="xsd:boolean" maxOccurs="1" minOccurs="1"
                        default="false">

采用相同的方法,我尝试使用相同的方法:

<xsd:element name="serviceType" type="tns:ProvServiceTypeEnumV1" maxOccurs="1" minOccurs="1"
                        default="NA">

当我使用xjc编译它时,我没有获得serviceType的默认值。但是布尔值是默认值

请在此处提出可能缺少的内容。

由于

1 个答案:

答案 0 :(得分:1)

从JAXB规范(2.0):

  

默认值来自元素声明的{value constraint}属性的值。与属性默认不同,只是一个元素   XML文档中存在空元素标记时的默认值。该   通过映射注释捕获元素的默认值   @XmlElement.defaultValue()。 unmarshaller设置了   遇到空元素标记时,属性为此默认值。   每当元素出现时,编组器都可以输出一个空元素标记   @XmlValue属性值与其默认值相同。

这对你来说可能会令人失望,但已经明确指出,我认为这背后有一些原因,因为其他变种似乎也有缺陷。

默认情况下不设置元素的主要原因是无法区分缺少的元素(field == null)和默认值。

修改

检查我的一些旧示例,我看到使用

属性生成的getter
<xs:attribute name="field" type="FieldType" use="optional"
              default="value1"/>
将<{1}}作为枚举的

生成为

FieldType

请注意,XML Schema仅在public FieldType getField() { if (field == null) { return FieldType.VALUE_1; } else { return field; } } 时允许属性的默认值。显然,与元素相比,属性是XML值的另一个“类别”。