[英]JAXB XML adapters not used with type of XmlElements annotation
我有一个类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的错误还是缺点? 我的方法错了吗?
请注意,我必须使用包级注释,我不能在类中直接进行注释。
原来,确实不可能将@XmlElements
与包级XML适配器或任何XML适配器一起使用。
我通过创建List<B>
和List<C>
解决该问题,然后在代码中将它们组合在一起以形成List<A>
。
但是,对于XML适配器使用列表元素而言,最重要的是:不允许指定@XmlElement
的type
属性。 保留它,XML适配器将起作用。 这意味着,列表的类型参数必须是您拥有适配器的确切类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.