【问题标题】:JAXB XML adapters not used with type of XmlElements annotationJAXB XML 适配器不与 XmlElements 注释类型一起使用
【发布时间】:2019-01-09 08:14:51
【问题描述】:

我有一个 A 类,有子类 B 和 C。 此外,我在 package-info.java 文件中使用了 XmlJavaTypeAdapters 注释。在其中我为 B 和 C 指定适配器

@XmlJavaTypeAdapters({
    @XmlJavaTypeAdapter(value = BAdapter.class, type = B.class),
    @XmlJavaTypeAdapter(value = CAdapter.class, type = C.class)
})
package xyz;

在要使用 JAXB 序列化的包 xyz 中的一个类中,我正在写这个:

@XmlElementWrapper(name = "entries")
@XmlElements({ @XmlElement(name = "b-entry", type = B.class),
               @XmlElement(name = "c-entry", type = C.class) })
private List<A> entries = new ArrayList<>();

这种结构通常在不需要 XML 适配器时总是有效的。但是,现在,JAXB 似乎没有使用为 @XmlElement 类型定义的 XML 适配器。它试图在没有适配器的情况下序列化“b-entry”和“c-entry”,但失败了。
我在包级别还有许多其他 XmlAdapter,除非您将它们与 @XmlElements 一起使用,否则它们都可以工作。

这是 JAXB 的错误还是缺点?我的方法错了吗?
请注意,我必须使用包级别的注释,我不能直接在类中进行注释。

【问题讨论】:

    标签: java xml jaxb


    【解决方案1】:

    事实证明,确实不可能将@XmlElements 与包级 XML 适配器或任何 XML 适配器一起使用。

    我通过创建List&lt;B&gt; 和List&lt;C&gt; 来解决这个问题,然后在代码中将它们组合成List&lt;A&gt;。

    然而,对于 XML 适配器使用列表元素最重要的是:您不能指定 @XmlElement 的 type 属性。不用管它,XML 适配器就可以工作了。这意味着,列表的类型参数必须是您拥有适配器的确切类型。

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      相关资源
      最近更新 更多