[英]JAXB annotation for class hierarchy
嘿,我有两节课。 当我尝试从它们创建XML结构时,我只获得根元素(A)。 为什么? 我使用了错误的注释吗?
@XmlRootElement(name = "a")
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class A{
@XmlElement
int a;
protected A(){
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public class B extends A{
@XmlElement
int b;
protected B(){
}
}
您可能需要在顶级类中使用@XmlSeeAlso
注释:
@XmlSeeAlso(B.class)
@XmlRootElement(name = "a")
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class A{
我写'可能',因为它取决于你如何设置你的JAXB上下文。 基本上,您需要确保JAXB知道所有应该序列化的类。 如果你的B
类没有在其他任何地方被提及(例如,作为JAXB已知的类之一的属性类型),那么JAXB就没有机会知道如何序列化B
实例。 @XmlSeeAlso
注释的目的是确保JAXB也查看这些列出的类。
更新:
或者,您可以在使用JAXBContext.newInstance(Class...)
创建JAXBContext
对象时提供所有子类的列表,例如:
JAXBContext.newInstance(A.class, B.class);
代替
JAXBContext.newInstance(A.class);
你可能已经做过了。
但我认为这是一个更糟糕的解决方案,因为每次在代码中使用JAXB时,它都会让您考虑相关的类。 在顶级解决方案中,您可以永久地设置关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.