[英]Jaxb unmarshal xml sequence to map
我有兩個類Foos
和Foo
,它們應該可以從XML序列化/反序列化:
@XmlRootElement(name = "foos")
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = "Foos", propOrder = { "foo" })
public class Foos {
protected Map<Foo, Foo> foo;
public Map<Foo, Foo> getFooMap() {
if (foo == null) {
foo = new HashMap<Foo, Foo>();
}
return this.foo;
}
@XmlElements(value = { @XmlElement })
public Collection<Foo> getFoo() {
return getFooMap().values();
}
}
和
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Foo", propOrder = { "name" })
public class Foo {
protected String name;
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
}
由於算法原因,我不能使用List<Foo>
但需要Map<Foo, Foo>
。 每個Foo
都應同時作為鍵和值放入Map
。
將Foos
對象編組到XML可以工作,因為我有getFoo
getter,但是從XML解組則沒有。 這可能是因為解組器不知道如何將Foo
對象的xml序列轉換為哈希映射。
我該如何告訴解組員?
我想我需要這樣的方法(偽代碼):
public void fillMap(XMLSequence<Foo> sequence) {
for (Foo foo : sequence)
getFooMap().put(foo, foo);
}
然后,它可能還需要一些xml注釋。
任何提示表示贊賞!
我找到了使用兩個字段的方法:
@XmlRootElement(name = "foos")
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = "Foos", propOrder = { "fooList", "foo" })
public class Foos {
@XmlElement(name="foo")
protected List<Foo> fooList;
protected Map<Foo, Foo> foo;
public Map<Foo, Foo> getFooMap() {
if (foo == null) {
foo = new HashMap<Foo, Foo>();
if (fooList != null)
for (Foo f : fooList)
foo.put(f, f);
}
return this.foo;
}
@XmlElement
public Collection<Foo> getFoo() {
return getFooMap().values();
}
}
在解組期間, fooList
中填充了<foo>...</foo>
xml元素中的數據。
getFooMap
調用getFooMap
時,它將填充fooList
的內容(通過將相同的對象作為鍵和值放置)。
在編組期間,將調用getFoo
方法,該方法將返回foo
映射的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.