我有一个Java应用程序,我想用XML而不是数据库保存数据。
我们决定使用JAXB而不是基于模式生成文件,我们只是在Java文件中添加了注释。
我们遇到的问题是我们有一个名为Node的抽象类的ArrayList。 Node具有Module或ScreenImage的子类。当我们编组arraylist时,它不会保存类型。如:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Module"
JAXB是否支持抽象元素?
如何让JAXB保存类型,以便我可以解组它?
答案 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)
应该可以正常工作。
请注意,如果Module
和ScreenImage
不是静态可以从绑定类(即JAXBContext.newInstance(...)
中指定的类)访问,则应明确绑定它们(添加它们到JAXBContext.newInstance(...)
参数)。