我有一个架构,它定义了带有可选 boolean 属性的类型。我想添加一个类型,该类型添加一个限制,将属性的默认值设置为“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 为该类 RealBob 生成 Java 类时,ReallyBob 没有应用任何限制。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "reallyBob")
public class ReallyBob
extends Bob
{
}
有什么方法可以让生成的类ReallyBob 设置 isBob 属性的默认值吗?
我看到过有关 JAXB 未应用限制的类似问题,即 here和 here响应表明在编码期间打开架构验证...我不确定在这种情况下如何应用它,因为它是默认值而不是值限制。
也许还有另一种方法可以解决这一切?
最佳答案
一种选择是在解码完成后设置该值。
这涉及将以下方法添加到您的对象中,并将对象设置为该方法内的默认值:
void afterUnmarshal(Unmarshaller u, Object parent) {
this.isBob = true;
}
查看相关文档here
关于java - 在 JAXB 生成的 Java 类中应用默认值限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33202655/