XML 模式 (schema.xsd)
以下是基于您的问题的示例 XML 架构。我必须更改基本类型以string
使其有效。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org"
xmlns="http://www.example.org"
elementFormDefault="qualified">
<xs:simpleType name="PowerUnit">
<xs:restriction base="xs:string">
<xs:enumeration value="MWh" />
<xs:enumeration value="mWh" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="root">
<xs:sequence>
<xs:element name="power-unit" type="PowerUnit"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
默认生成类
如果JAXB (JSR-222)实现无法生成枚举,那么它将创建基本类型的属性。
package org.example;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "root", propOrder = {
"powerUnit"
})
public class Root {
@XmlElement(name = "power-unit", required = true)
protected String powerUnit;
public String getPowerUnit() {
return powerUnit;
}
}
外部绑定文件 (binding.xml)
您可以使用外部绑定文件来重命名枚举中的一项。
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="schema.xsd">
<jxb:bindings node="//xs:simpleType[@name='PowerUnit']/xs:restriction/xs:enumeration[@value='mWh']">
<jxb:typesafeEnumMember name="M"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
新生成的类
现在枚举中的名称冲突已经解决,将在生成的 JAXB 模型中使用枚举。
package org.example;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "root", propOrder = {
"powerUnit"
})
public class Root {
@XmlElement(name = "power-unit", required = true)
protected PowerUnit powerUnit;
}
枚举 (PowerUnit)
下面是生成的enum
样子:
package org.example;
import javax.xml.bind.annotation.*;
@XmlType(name = "PowerUnit")
@XmlEnum
public enum PowerUnit {
@XmlEnumValue("MWh")
M_WH("MWh"),
@XmlEnumValue("mWh")
MWH2("mWh");
private final String value;
PowerUnit(String v) {
value = v;
}
public String value() {
return value;
}
public static PowerUnit fromValue(String v) {
for (PowerUnit c: PowerUnit.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}