我想使用XmlAdapter
調整HashMap
字段的XML表示。我使用ArrayList
來做到這一點。但是,編組ArrayList
時根本沒有編組。這是爲什麼?JAXB編組一個由XmlAdapter創建的ArrayList
代碼
@XmlRootElement
public class Foo {
private HashMap<String, String> hashMap;
public Foo() {
this.hashMap = new HashMap<String, String>();
}
@XmlJavaTypeAdapter(HashMapAdapter.class)
public HashMap<String, String> getHashmap() {
return hashMap;
}
public void setHashmap(HashMap<String, String> hashMap) {
this.hashMap = hashMap;
}
}
public final class HashMapAdapter extends XmlAdapter<ArrayList<HashMapEntry>, HashMap<String, String>> {
@Override
public ArrayList<HashMapEntry> marshal(HashMap<String, String> arg0) throws Exception {
ArrayList<HashMapEntry> result = new ArrayList<HashMapEntry>();
for(Entry<String, String> entry : arg0.entrySet())
result.add(new HashMapEntry(entry.getKey(), entry.getValue()));
return result;
}
@Override
public HashMap<String, String> unmarshal(ArrayList<HashMapEntry> arg0) throws Exception {
HashMap<String, String> result = new HashMap<String, String>();
for(HashMapEntry entry : arg0)
result.put(entry.key, entry.value);
return result;
}
}
public class HashMapEntry {
@XmlElement
public String key;
@XmlValue
public String value;
public HashMapEntry() {
}
public HashMapEntry(String key, String value) {
this.key = key;
this.value = value;
}
}
結果
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><foo><hashmap/></foo>
謝謝,這個作品。不過,我在生成的XML中獲得了額外的註釋級別。有什麼辦法可以避免這種情況? – hansi
@hansi - 我用一個例子說明了如何通過利用EclipseLink JAXB(MOXy)的'@ XmlPath'擴展來完成我的答案。我是MOXY的領導者。 –