在JAXB生成的Java类中应用默认值限制

时间:2015-10-18 20:06:58

标签: java xml jaxb

我有一个模式,它定义了一个带有可选布尔属性的Type。我想添加一个类型,添加一个限制,将属性的默认值设置为“true”

<xsd:complexType name="bob">
    <xsd:attribute name="isBob" type="xsd:boolean" use="optional" /> 
</xsd:complexType>

<xsd:complexType name="reallyBob">
    <xsd:complexContent>
        <xsd:restriction base="sa:bob">  
            <xsd:attribute name="isBob" type="xsd:boolean" default="true" use="optional" /> 
        </xsd:restriction>
    </xsd:complexContent>
</xsd:complexType>

但是当我们使用JAXB为这个类生成Java类时,ReallyBob没有应用限制。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "reallyBob")
public class ReallyBob
    extends Bob
{
}

有没有办法让生成的类ReallyBob设置isBob属性的默认值?

我见过类似的问题,关于JAXB未应用的限制,即herehere响应表明在编组期间启用模式验证...我不确定这将如何应用于此case,作为默认值而不是值限制。

或许还有另一种解决方法吗?

1 个答案:

答案 0 :(得分:1)

一种选择是在解组完成后设置值。

这涉及将以下方法添加到对象中,并将对象设置为此方法中的默认值:

void afterUnmarshal(Unmarshaller u, Object parent) {
  this.isBob = true;
}

请参阅相关文档here