有誰知道如何定製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