2013-12-14 29 views
0

我的JAXB類是如下編組地圖類似於列表使用JAXB

@XmlRootElement 
class A 
{ 
    @XmlElement(name = "bean") 
    List<Bean> beans; 
    . . . 
} 

@XmlType 
@XmlAccessorType(XmlAccessType.FIELD) 
class Bean 
{ 
    @XmlAttribute 
    String name; 
    @XmlValue 
    String value; 
    . . . 
} 

當我名帥數據我得到這個

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<a> 
    <bean name="Name1">Value1</bean> 
    <bean name="Name2">Value2</bean> 
</a> 

可使用的Map<String,String>代替List<Bean>我實現類似的輸出?

到目前爲止,我嘗試了這樣的

@XmlRootElement 
class A 
{ 
    @XmlJavaTypeAdapter(MyAdapter.class) 
    Map<String, String> map; 
    . . . 
} 

class BeanList 
{ 
    @XmlElement(name = "bean") 
    List<Bean> beans; 
    . . . 
} 

class MyAdapter extends XmlAdapter<BeanList, Map<String, String>> 
{ 
    @Override 
    public BeanList marshal(Map<String, String> map) throws Exception 
    { 
    . . . 
    } 

    @Override 
    public Map<String, String> unmarshal(BeanList list) throws Exception 
    { 
    . . . 
    } 
} 

但是這給了我輸出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<a> 
    <map> 
     <bean name="Name4">Value4</bean> 
     <bean name="Name3">Value3</bean> 
    </map> 
</a> 

有什麼辦法避免<map>標籤...

在這方面的任何幫助將不勝感激

回答

0

解決這個通過改變map短暫和增加私人/默認設置+ get方法來進行轉換,以List<Bean>與註釋XmlElement

@XmlRootElement 
class A 
{ 
    @XmlTransient 
    Map<String, String> map; 

    //For JAXB use 
    private void setBeans(List<Bean> beans) 
    { 
    //Populate map 
    } 

    //For JAXB use 
    @XmlElement(name = "bean") 
    private List<Bean> getBeans() 
    { 
    //Convert map to List<Bean> 
    } 
}