使用Jaxb2Marshaller来解组XML属性(原始类型)时遇到问题。 以下是样本:
<?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()。iterator()。next()。getId()== null它应该是1.如果我使用嵌套元素而不是属性,一切正常。如何解决?我不想为所有原始Java类型编写一批XmlAdapter。
答案 0 :(得分:2)
默认情况下,XML中的属性不使用其父元素的命名空间限定。
<item id="3" xmlns="foo"/>
item
元素的名称空间为foo
,但id
属性没有。{/ p>
要解决您的问题,您只需要从namespace
方法中删除getId()
声明:
@XmlAttribute(name = "id")
public Long getId() {
return _id;
}