在JAXB中编组抽象类的arraylist

时间:2010-01-18 17:14:48

标签: java jaxb

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

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

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

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

JAXB是否支持抽象元素?

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

2 个答案:

答案 0 :(得分:7)

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

e.g:

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

答案 1 :(得分:3)

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