2014-10-30 110 views
3

我無法理解我在做什麼錯誤。 我想使用JAXB解組一個xml,但我注意到setter方法沒有被調用。 我正在使用Java 1.5。 Attribute.java類中的Getters和Setter - 正常工作,但在Configuration.java類中 - Setter方法不會調用。你能告訴我我錯在哪裏嗎?JAXB不會調用Setter方法

@XmlRootElement(name="configuration") 
@XmlAccessorType(XmlAccessType.NONE) 
public class Configuration {  
    public List< Configuration> getItems() { 
     return new ArrayList<Attribute>(getMap().values()); 
    } 

    @XmlElement(name="attributes") 
    public void setItems(List<Attribute> attributes) { 
     getMap().clear(); 
     for (Attribute attribute : attributes) { 
      getMap().put(attribute.getName(), attribute); 
     } 
    } 

    private Map<String, Attribute> map; 

    public Map<String, Attribute> getMap() { 

     if (map == null) { 
      map = new HashMap<String, Attribute>(); 
     } 
     return map; 
    } 
} 

我的XML看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <attributes name="some_name" type="calculation" value="select ? from dual" priority="0"/> 
</configuration> 

回答

5

如果List從getter返回一個JAXB IMPL將用它來添加的,而不是創建一個新的,並通過設置它的藏品二傳手。

這樣做的目的是讓您有機會初始化最適合您的域模型的List的實現。

+1

謝謝布萊斯的解釋。 – kvatashydze 2014-11-03 20:24:14