java - 替代@XmlSeeAlso

标签 java jaxb

abstract Class A{

}


Class B extends A{

}


@XmlRootElement
Class C {
   @XmlElement(name = "tobeserialized")
   A tobeserialized;
}


Class D{
 public void marshal(){
 C all = getData();
 JAXB.marshal(all, new File("saved.xml");

  }

为了让 JAXB 知道类 B 是类 A 的子类,我需要在类 A 上放置一个 @XmlSeeAlso(value = {B.class})。我们有大约 50 个 A 的子类。

但是项目依赖是这样的,A类位于一个不能访问B类的包中。所以我不能把注解放在A类上。

有什么替代方案可以让 JAXB 序列化 A 类的子类?

最佳答案

@XmlSeeAlso映射继承关系时不需要注释,但这是最常使用的时候。 @XmlSeeAlso的作用是告诉 JAXB 为无法通过遍历类推断出的类拉入并生成元数据。

在您的示例中,如果您创建了 JAXBContextC 上类 ( JAXBContext.newInstance(C.class) ) 然后是 A由于 tobeserialized 类也将被处理字段,但是 B不会,因为 Java 中没有找到子类的机制。你可以通过输入 @XmlSeeAlso(B.class) 来解决这个问题在 A或者通过在用于引导 JAXBContext 的类中包含子类:

JAXBContext.newInstance(B.class, C.class);

关于java - 替代@XmlSeeAlso,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935649/

相关文章:

java - 将java中的时间格式从YYYY-MM-DD转换为Day-Month-Year

java - 如何替换已弃用的方法 Mockit.setUpMock?

用默认值初始化的JAXB对象

java - 如何使 Jackson 的序列化包含属性尊重 JAXB "required"属性?

java - 如何仅获取特定文件的父目录名称

java - 即使凭据正确,Spring-security 也不会登录用户

java - 无法将字段设置为 com.sun.proxy.$Proxy

jaxb - 在 Jersey 使用 Gson 而不是 Jackson

java - JAXB动态添加元素

jaxb - 如何自定义 Jersey JAXB 序列化的 XML 输出