在编组时,为什么JAXB不为具有固定值的必需属性调用getter方法?

时间:2012-10-17 14:48:09

标签: binding jaxb marshalling fixed required

我有一个属性:

生成的JAXB对象中的关联getter方法如下所示:

public String getUnits(){
    if(units == null) return "metric";
    else return units;
}
当编组并且未设置值时,JAXB Marshaller不会调用

getUnits()。 为什么不召唤这个?

1 个答案:

答案 0 :(得分:4)

<强> schema.xsd

以下是您用于生成Java类的XML架构的简化版本:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/schema" xmlns:tns="http://www.example.org/schema" elementFormDefault="qualified">
    <element name="root">
        <complexType>
            <attribute name="units" fixed="metric"/>
        </complexType>
    </element>
</schema>

<强>根

这将导致生成类似以下的类。由于指定了@XmlAccessorType(XmlAccessType.FIELD),因此JAXB(JSR-222)实现将从字段中获取值,而不是访问getUnits()方法。

package org.example.schema;

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "root")
public class Root {

    @XmlAttribute(name = "units")
    @XmlSchemaType(name = "anySimpleType")
    protected String units;


    public String getUnits() {
        if (units == null) {
            return "metric";
        } else {
            return units;
        }
    }

    public void setUnits(String value) {
        this.units = value;
    }

}

了解更多信息