我有一个属性:
生成的JAXB对象中的关联getter方法如下所示:
public String getUnits(){
if(units == null) return "metric";
else return units;
}
当编组并且未设置值时,JAXB Marshaller不会调用getUnits()。 为什么不召唤这个?
答案 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;
}
}
了解更多信息