gpt4 book ai didi

java - Jaxb2Marshaller 和属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:40:20 25 4
gpt4 key购买 nike

我在使用 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。

最佳答案

默认情况下,XML 中的属性未使用其父元素的命名空间进行限定。所以对于

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

item 元素具有命名空间 foo,但 id 属性没有。

要解决您的问题,您只需要从 getId() 方法中删除 namespace 声明:

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

关于java - Jaxb2Marshaller 和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3779621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com