有谁知道如何定制XmlAdapter
附载于异质列表中的对象(如表)? 例如 - 假设我们有一个容器类miscelaneous对象的列表:JAXB:XmlAdapter的列表<Object>项目
@XmlRootElement(name = "container")
public class Container {
private List<Object> values = new ArrayList<Object>();
@XmlElement(name = "value")
public List<Object> getValues() {
return values;
}
public void setValues(List<Object> values) {
this.values = values;
}
}
如果我们把String
-s,Integer
-s等,他们将被默认映射。现在假设我们想提出一个自定义对象:
public class MyObject {
//some properties go here
}
显而易见的解决方案是编写一个自定义适配器:
public class MyObjectAdapter extends XmlAdapter<String, MyObject> {
//marshalling/unmarshalling
}
不过遗憾的是它不与封装级@XmlJavaTypeAdapter
工作 - 适配器只是从来没有称这样的编组失败。 我不能将其应用到getValues()
直接,因为可以有其他类型的对象。 @XmlJavaTypeAdapter
只有当我有myObject的类型的字段集装箱(也与包级annotaton)工作原理:
public class Container {
private MyObject myObject;
}
但这不是我想要的 - 我想任意对象的列表。我正在使用标准Sun的JAXB实现:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.3-1</version>
</dependency>
任何想法如何做映射?
P.S:一个小小的澄清 - 我想避免注释MyObject
与JAXB注解。它可能是一个不受我控制的来自第三方库的课程。所以任何改变都应该在MyObject
之外。
'ContextResolver'可能是一个很好的解决方案... – Mark 2017-03-06 16:56:19