Menu Close

34.3. 列挙

概要

XML スキーマでは、列挙型は xsd:enumeration ファセットを使用して定義される単純型です。アトミック単純型とは異なり、それらは Java enum にマッピングされます。

XML スキーマでの列挙型の定義

列挙は、xsd:enumeration ファセットを使用する単純型です。各 xsd:enumeration ファセットは、列挙型に使用できる値を 1 つ定義します。

例34.5「XML スキーマで定義される列挙」に、列挙型の定義を示します。以下の値を使用できます。

  • big
  • large
  • mungo
  • gargantuan

例34.5 XML スキーマで定義される列挙

<simpleType name="widgetSize">
  <restriction base="xsd:string">
    <enumeration value="big"/>
    <enumeration value="large"/>
    <enumeration value="mungo"/>
    <enumeration value="gargantuan"/>
  </restriction>

Java へのマッピング

ベース型が xsd:string である XML スキーマ列挙は、自動的に Java enum 型にマッピングされます。「列挙マッピングのカスタマイズ」で説明されているカスタマイズを使用すると、コードジェネレーターに対し、他のベース型の列挙を Java enum 型にマッピングするように指示できます。

enum 型は以下のように作成されます。

  1. 型の名前は 単純型定義の name 属性から取得され、Java 識別子に変換されます。

    通常、これは XML スキーマの名前の最初の文字を大文字に変換することを意味します。XML スキーマ名の最初の文字が無効な文字である場合は、名前の前にアンダースコア (_) が追加されます。

  2. enumeration ファセットごとに、列挙定数が value 属性の値に基づいて生成されます。

    定数の名前は、値のすべての小文字を対応する大文字に変換することで導出されます。

  3. 列挙のベース型からマッピングされた Java 型を取るコンストラクターが生成されます。
  4. 型のインスタンスによって表されるファセットの値にアクセスするために、value() というパブリックメソッドが生成されます。

    value() メソッドの戻り値の型は、XML スキーマ型のベース型です。

  5. ファットの値に基づいて列挙型のインスタンスを作成するために、fromValue() というパブリックメソッドが生成されます。

    value() メソッドのパラメーター型は、XML スキーマ型のベース型です。

  6. クラスに @XmlEnum アノテーションが付けられます。

例34.5「XML スキーマで定義される列挙」で定義される列挙型は、例34.6「文字列のベース XML スキーマ列挙に生成される列挙型」に記載の enum 型にマッピングされます。

例34.6 文字列のベース XML スキーマ列挙に生成される列挙型

@XmlType(name = "widgetSize")
@XmlEnum
public enum WidgetSize {

    @XmlEnumValue("big")
    BIG("big"),
    @XmlEnumValue("large")
    LARGE("large"),
    @XmlEnumValue("mungo")
    MUNGO("mungo"),
    @XmlEnumValue("gargantuan")
    GARGANTUAN("gargantuan");
    private final String value;

    WidgetSize(String v) {
        value = v;
    }

    public String value() {
        return value;
    }

    public static WidgetSize fromValue(String v) {
        for (WidgetSize c: WidgetSize.values()) {
            if (c.value.equals(v)) {
                return c;
            }
        }
        throw new IllegalArgumentException(v);
    }

}