我正在使用J2SE附帶的JAXB實現序列化一個包含HashMap屬性的bean。我會認爲這應該工作的開箱,因爲 this狀態JAXB忽略HashMap屬性?
當它作爲一個bean的歡迎使用屬性JAXB規範定義了一個特殊處理的地圖。例如,下面的豆會產生個XML像下面這樣: ...
這或多或少的作品,除非該結構具有一個以上的水平,即HashMap的是Bean的屬性是一個屬性一個bean的 - 這樣的:
import java.util.HashMap;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.JAXB;
class bean {
@XmlElement public HashMap<String,String> map;
}
@XmlRootElement class b2 {
@XmlElement public bean b;
}
class foo {
public static void main(String args[]) {
try {
bean b = new bean();
b.map = new HashMap<String,String>();
b.map.put("a","b");
b2 two = new b2();
two.b=b;
JAXB.marshal(two, System.out);
} catch (Exception e) {
System.out.println("Exception: " + e.toString());
}
}
}
此輸出 <?xml version="1.0" encoding="UTF-8" standalone="yes"?><b2><b><map/></b></b2>
,而不是一個格式正確的HashMap中。它工作,如果我註釋bean
與@XmlRootElement
並從map
刪除@XmlElement
,但我不明白爲什麼這是必要的。它應該是這樣嗎?
'map' **被**定義爲屬性並且仍然不起作用 –
這裏的情況是,將Map作爲一個bean屬性的特殊處理只會在'@ XmlElement'註釋不存在。通過這個註解,Map被視爲一個bean。由於沒有JavaBean獲取器和設置器,因此生成的XML元素爲空。 – vanje
@vanje,感謝您的評論 - so ... – themel