3

我有一个属性:

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

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

编组时 JAXB Marshaller 未调用 getUnits() 并且未设置该值。为什么不叫这个?

4

1 回答 1

4

架构.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;
    }

}

了解更多信息

于 2012-10-17T19:07:48.340 回答