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)
外部バインディング ファイルを使用して、列挙内の項目の 1 つの名前を変更できます。
<?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);
}
}