2010-09-23 79 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