私はJ2SEに付属のJAXB実装を使用して、HashMapプロパティを含むBeanを直列化しています。私はそれは豆のpropetyとして使われているとき this状態JAXBはHashMapのプロパティを無視しますか?
JAXB仕様は地図のための特別な処理を定義しているので、これは箱から出して動作する必要があることを前提とします。たとえば、次のBeanは、次のようなXMLSを生成する:...
この多かれ少なかれ作品HashMapのプロパティがあり、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());
}
}
}
これは代わりに、正しくフォーマットされたHashMapの <?xml version="1.0" encoding="UTF-8" standalone="yes"?><b2><b><map/></b></b2>
を出力します。 bean
に@XmlRootElement
と注釈を付けてmap
から@XmlElement
を削除すると機能しますが、なぜその必要があるのかわかりません。それはそれのようになっているのだろうか?
'map' **はプロパティとして定義されていても動作しません。 –
ここでのケースは、Beanプロパティとしてのマップの特別扱いは、@ XmlElementアノテーションは存在しません。このアノテーションを使用すると、MapはBeanとして処理されます。また、JavaBean getterおよびsetterが存在しないため、結果のXML要素は空です。 – vanje
@vanje、コメントのためにありがとう - – themel