java - 在 JAXB 中编码抽象类的数组列表

标签 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 保存类型,以便我能够解码它?

最佳答案

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

例如:

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

关于java - 在 JAXB 中编码抽象类的数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2087809/

相关文章:

java - 贾克斯B : is it recommended to use JAXB to get java objects from xml in non-webservice project

java - 同时运行 grunt 和 tomcat 服务器的 Web 应用程序(Spring、Angular、Grunt、Maven、Tomcat)

java - JAXB 解码适用于 Java 1.8,但在 Java 1.7 中返回空值

java - 使用 packageName 和 Classloader 实例化 JAXBContext 时混淆 ClassNotFoundException

java - Spring @Transactional 方法中没有事务启动

java - 使用 EclipseLink JAXB (MOXy) 解码 XML 时出现 DescriptorException "Missing class indicator field from database row"异常

java - 为什么我的解码器要等到它具有以下开始元素才能使用 XMLStreamReader 返回?

java - 使用 Jena 将字符串插入到 SPARQL 查询中

java - 如何通过paintComponent方法在JPanel中绘制图形?

java - JTable 单元格中的多个 JCheckBoxes