2010-09-23 80 views
3

我有一個問題,使用Jaxb2Marshaller解編XML屬性(原始類型)。 下面是示例:Jaxb2Marshaller和屬性

<?xml version="1.0" encoding="UTF-8"?> 
<request xmlns="..."> 
    <items> 
     <item id="1"/> 
     <item id="2"/> 
     <item id="3"/> 
    </items> 
</request> 

與實體類是:。

@XmlAccessorType(XmlAccessType.PROPERTY) 
@XmlRootElement(name = "request", namespace = "...") 
@XmlType(name = "Request", namespace = "...") 
public class Request { 

    private List<Item> _items; 

    @XmlElementWrapper(name = "items", namespace = "...") 
    @XmlElement(name = "item", namespace = "...") 
    public List<Item> getItems() { 
     return _items; 
    } 

    public void setItems(List<Item> items) { 
     _items= items; 
    } 

    @XmlType(name = "Item", namespace = "...") 
    public static class Item { 

     private Long _id; 

     @XmlAttribute(name = "id", namespace = "...") 
     public Long getId() { 
      return _id; 
     } 

     public void setId(Long id) { 
      _id = id; 
     } 
    } 
} 

解組我有request.getItems()後,迭代器()的next()的getId()== NULL而它應該是1.如果我使用嵌套元素,而不是屬性,一切正常。它如何被修復?我不想爲所有原始Java類型編寫一批XmlAdapter。

回答

2

XML中的屬性默認情況下未用其父元素的名稱空間限定。因此,對於

<item id="3" xmlns="foo"/> 

item元素有命名空間foo,但id屬性不。

解決您的問題,您應該只需要從getId()方法去除namespace聲明:

@XmlAttribute(name = "id") 
public Long getId() { 
    return _id; 
} 
+0

謝謝。它解決了這個問題。 – Vladimir 2010-09-27 06:58:32