我有一个模式,它定义了一个带有可选布尔属性的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未应用的限制,即here和here响应表明在编组期间启用模式验证...我不确定这将如何应用于此case,作为默认值而不是值限制。
或许还有另一种解决方法吗?
答案 0 :(得分:1)
一种选择是在解组完成后设置值。
这涉及将以下方法添加到对象中,并将对象设置为此方法中的默认值:
void afterUnmarshal(Unmarshaller u, Object parent) {
this.isBob = true;
}
请参阅相关文档here