Java 要映射的Jaxb解组xml序列

Java 要映射的Jaxb解组xml序列,java,dictionary,jaxb,unmarshalling,Java,Dictionary,Jaxb,Unmarshalling,我有两个类Foos和Foo,它们应该可以序列化/反序列化到XML或从XML中序列化: @XmlRootElement(name = "foos") @XmlAccessorType(XmlAccessType.NONE) @XmlType(name = "Foos", propOrder = { "foo" }) public class Foos { protected Map<Foo, Foo> foo; public Map<Foo, Foo>

我有两个类
Foos
Foo
,它们应该可以序列化/反序列化到XML或从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();
    }

}
出于算法原因,我不能使用
列表
,但需要
映射
。每个
Foo
都应作为键和值放入
Map

Foos
对象编组到XML是有效的,因为我有
getFoo
getter,但从XML中解组则不行。这可能是因为解组器不知道如何将
Foo
对象的xml序列转换为哈希映射

我怎样才能告诉解编员呢?

我想我需要这样的方法(伪代码):

public void fillMap(XMLSequence序列){
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();
    }

}
@XmlRootElement(name=“foos”)
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name=“Foos”,proporter={“傻瓜”,“foo”})
公共类食品{
@xmlement(name=“foo”)
受保护名单傻瓜;
受保护地图;
公共地图getFooMap(){
if(foo==null){
foo=newhashmap();
if(傻瓜!=null)
对于(Foo f:傻瓜)
foo.put(f,f);
}
返回此.foo;
}
@XmlElement
公共集合getFoo(){
返回getFooMap().values();
}
}
  • 在解组过程中,
    傻瓜列表
    将填充来自
    xml元素的数据

  • 当第一次调用
    getFooMap
    时,它将填充
    doulist
    的内容(通过将相同的对象放入key和value)

  • 编组期间,调用方法
    getFoo
    ,该方法将返回
    foo
    映射的值

public void fillMap(XMLSequence<Foo> sequence) {
    for (Foo foo : sequence)
        getFooMap().put(foo, foo);
}
@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();
    }

}