jaxb生成的类中的继承

时间:2014-09-23 18:54:20

标签: java xml jaxb

我正在使用jaxb自动生成用于将xml内容解组到java应用程序中的类。我注意到结果类有很多冗余。特别是,它们最终将被转移到的模型使用继承来避免冗余。我很想重写所有生成的类,以便它们也使用继承。有没有理由不这样做?

例如:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "A", propOrder = {"p1","p2","p3"})
Class A {
    @XmlElement(required = true)
    property p1;
    @XmlElement(required = true)
    property p2;
    @XmlElement(required = true)
    property p3;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "B", propOrder = {"p1","p2","p4"})
class B {
    @XmlElement(required = true)
    property p1;
    @XmlElement(required = true)
    property p2;
    @XmlElement(required = true)
    property p4;
}

会变成:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Root", propOrder = {"p1","p2"})
@XmlSeeAlso({A.class, B.class})
Class Root {
    @XmlElement(required = true)
    property p1;
    @XmlElement(required = true)
    property p2;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "A", propOrder = {"p3"})
Class A extends Root{
    @XmlElement(required = true)
    property p3;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "B", propOrder = {"p4"})
Class B extends Root{
    @XmlElement(required = true)
    property p4;
}

如果我进行这种转换,@ xml ...注释是否会停止工作? jaxb还能正常解组吗?如果我不简化上面显示的代码,我认为另一种方法是构建另一组中间类,将未编组的数据转换为我的应用程序模型。有人关心评论或改进吗?

1 个答案:

答案 0 :(得分:2)

简答

如果进行此更改,JAXB将继续工作。

你做了什么的影响

如果从Java类重新生成XML Schema,您会看到复杂类型之间的继承。您可能希望将Root类抽象化,以便没有人可以意外地实例化它。

你还能做什么

您可以将Root课程标记为@XmlTransient。这将从类型层次结构中删除它,并将其所有属性视为属于子类: