JAXB - 当包装元素是root时,如何使用XmlAdapter来解组列表?

时间:2015-12-17 18:49:06

标签: java jaxb hashmap wrapper unmarshalling

当列表的包装元素是根本身时,是否存在将列表解组为映射的方法?

我有以下xml结构,我无法改变:

<?xml version="1.0"?>
   <root>
     <article id="1">...</article>
     <article id="2">...</article>
    ...
  </root>

我喜欢以下地图结构:

Map<Integer,Article> map 

我尝试使用XmlAdapter,但问题是适配器的unmarshal方法。这里它喜欢有一个自己的包装元素,例如&#34;物品&#34;这是我没有的。我发现只有working examples列表有自己的专用包装元素。

我试过&#34; unmarshall(列出文章)&#34;但它从未被调用过。并使用&#34; unmarshall(对象文章)&#34;它会为每个文章元素调用th方法

任何提示?

@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class DataSet {
   @XmlJavaTypeAdapter(MyAdapter.class)
   @XmlElement(name="article")
   private Map<Integer,Article> map;
}

public class MyAdapter extends XmlAdapter< ??? , Map<Integer,Article>  {

    @Override
    public Map<Integer, Article> unmarshal( ???  ) throws Exception {
     Map<Integer, Article> map = new HashMap<Integer, Article>();
     ...
     return map;
    }
    ...
}

1 个答案:

答案 0 :(得分:0)

答案是,它目前不受支持,你需要自己做,意味着在解组后你需要遍历对象列表并自己将它们放到地图上