3
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 类的子类?

4

2 回答 2

3

@XmlSeeAlso映射继承关系时不需要注释,但这是最常用的时候。的作用@XmlSeeAlso是告诉 JAXB 拉入并为无法通过遍历类推断的类生成元数据。

在您的示例中,如果您JAXBContext仅在C类 ( JAXBContext.newInstance(C.class)) 上创建了该类,则A该类也将由于该tobeserialized字段而被处理,但B不会因为 Java 中没有查找子类的机制。您可以通过在用于引导的类中添加或包含子类@XmlSeeAlso(B.class)来解决此问题:AJAXBContext

JAXBContext.newInstance(B.class, C.class);
于 2013-06-05T09:16:10.093 回答
0

对我来说已经很长时间了,但是您可以尝试添加@XmlTransientA@XmlType类和 B 类。

或者@XmlTransient在 A 类和 B 类上(因为它们是抽象的)并添加@XmlType到具体的子类中。

于 2013-06-05T09:03:08.880 回答