在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的默认值。但是布尔值是默认值
请在此处提出可能缺少的内容。
由于
答案 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值的另一个“类别”。