abstract Class A{
}
Class B extends A{
}
@XmlRootElement
Class C {
@XmlElement(name = "tobeserialized")
A tobeserialized;
}
Class D{
public void marshal(){
C all = getData();
JAXB.marshal(all, new File("saved.xml");
}
为了让 JAXB 知道类 B 是类 A 的子类,我需要在类 A 上放置一个 @XmlSeeAlso(value = {B.class})。我们有大约 50 个 A 的子类。
但是项目依赖是这样的,A类位于一个不能访问B类的包中。所以我不能把注解放在A类上。
有什么替代方案可以让 JAXB 序列化 A 类的子类?
最佳答案
@XmlSeeAlso
映射继承关系时不需要注释,但这是最常使用的时候。 @XmlSeeAlso
的作用是告诉 JAXB 为无法通过遍历类推断出的类拉入并生成元数据。
在您的示例中,如果您创建了 JAXBContext
在 C
上类 ( JAXBContext.newInstance(C.class)
) 然后是 A
由于 tobeserialized
类也将被处理字段,但是 B
不会,因为 Java 中没有找到子类的机制。你可以通过输入 @XmlSeeAlso(B.class)
来解决这个问题在 A
或者通过在用于引导 JAXBContext
的类中包含子类:
JAXBContext.newInstance(B.class, C.class);
关于java - 替代@XmlSeeAlso,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935649/