[英]Marshalling arraylist of abstract class in JAXB
我有一个Java应用程序,希望将数据保存为XML而不是数据库。
我们决定使用JAXB,而不是根据模式生成文件,而是将注释添加到了Java文件中。
我们遇到的问题是,我们有一个名为Node的抽象类的ArrayList。 节点具有Module或ScreenImage的子类。 当我们编组arraylist时,它不会保存类型。 如:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Module"
JAXB是否支持抽象元素?
如何获取JAXB来保存类型,以便能够将其解组?
axtavt的建议很好。 我只想添加另一种方法。 您可以使用@XmlSeeAlso,在其中可以声明其他应定义且对JAXBContext可见的类。 您只需确保在JAXBContext可见的类中声明注释。
例如:
@XmlRootElement
@XmlSeeAlso({Node.class, Module.class, ScreenImage.class})
class SomeContent {
private List<Node> nodes;
///... accessors
}
它应该工作正常。 请注意,如果从绑定的类(即JAXBContext.newInstance(...)
指定的类)不能静态访问您的Module
和ScreenImage
,则应将它们显式绑定(将它们添加到JAXBContext.newInstance(...)
参数中) )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.