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

标签 java xml jaxb

我有一个架构,它定义了带有可选 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 未应用限制的类似问题,即 herehere响应表明在编码期间打开架构验证...我不确定在这种情况下如何应用它,因为它是默认值而不是值限制。

也许还有另一种方法可以解决这一切?

最佳答案

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

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

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

查看相关文档here

关于java - 在 JAXB 生成的 Java 类中应用默认值限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33202655/

相关文章:

xml - 将 XML 节点绑定(bind)到 TreeView 节点

android - 为检索到的 XML 数据过滤 SPINNER

java - 如何从 Java 漂亮地打印 XML?

java - java应用程序swing中的按钮共享图像

java - 无法将第二个 JLabel 添加到单个 JWindow 中的第二个 JPanel

java - Spring Jaxb2Marshaller 外部绑定(bind)文件

java - 解码数组不会给我任何值

java - 从 JAXB 的 XSD 创建 XML 文件

java - 浏览器停止加载后停止服务器线程

java - 如何抑制字段或局部变量的 FindBugs 警告?