java - JAXB 不调用 Setter 方法

标签 java xml jaxb

我不明白我做错了什么。 我想使用 JAXB 解码一个 xml,但我注意到没有调用 setter 方法。 我正在使用 Java 1.5。 Attribute.java 类中的 Getters 和 Setters - 工作正常,但在 Configuration.java 类中 - 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>

最佳答案

如果 List 从 getter 返回,JAXB impl 将使用它来添加集合项,而不是创建一个新列表并通过 setter 设置它。

这样做的目的是让您有机会初始化最适合您的域模型的 List 的实现。

关于java - JAXB 不调用 Setter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26664152/

相关文章:

java - 当 O(1) 与 O(log n) 无关紧要时,TreeSet 与 HashSet 对于小集合大小的速度

java - 将部分 json 映射到 dto

python - 如何从 Odoo 10 中的自定义模块修改 noupdate ="1"XML 记录?

xml - 使用 XSLT 排序后将 XML 转换为 XML

web-services - 请帮助: xjc throws "Two declarations cause a collision in the ObjectFactory class"

java - lucene Field.Index.ANALYZED 在Version.LUCENE_40 中不起作用

java - Java 集合框架中接口(interface)方法的实现发生在哪里?

python - 如何检查 xml 中两个元素的属性值是否相同

maven - jaxb2 maven 插件在第二次执行时不起作用

Java:混合(数据类型)变量参数