在JAXB中编组抽象类的arraylist

我有一个Java应用程序,我想用XML而不是数据库保存数据。

我们决定使用JAXB而不是基于模式生成文件,我们只是在Java文件中添加了注释。

我们遇到的问题是我们有一个名为Node的抽象类的ArrayList。 Node具有Module或ScreenImage的子类。 当我们编组arraylist时,它不会保存类型。 如:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Module" 

JAXB是否支持抽象元素?

如何让JAXB保存类型,以便我可以解组它?

它应该工作正常。 请注意,如果您的ModuleScreenImage不能从绑定类(即JAXBContext.newInstance(...)指定的类) 静态访问,则应明确绑定它们(将它们添加到JAXBContext.newInstance(...)参数中)。

axtavt的建议很好。 我只想添加另一种方法。 您可以使用@XmlSeeAlso,您可以在其中声明应该定义并对JAXBContext可见的其他类。 您只需确保在JAXBContext已经可见的类中声明注释。

例如:

 @XmlRootElement @XmlSeeAlso({Node.class, Module.class, ScreenImage.class}) class SomeContent { private List nodes; ///... accessors }