先週に引きつづき,今週もJAXBで使われるアノテーションを紹介していきます。今週は列挙型を修飾するアノテーションと,フィールド/プロパティを修飾するアノテーションです。

その後,実際にJavaのクラスからスキーマを生成させる方法を紹介します。

列挙型を修飾するアノテーション

列挙型は特殊なクラスなので,クラスを修飾するアノテーションはすべて使用することができます。それ以外に@XmlEnumと@XmlEnumValueが使用できます。

表1 列挙型を修飾するアノテーション
アノテーション名 説明/デフォルト値
@XmlEnum クラスをスキーマの型に対応づける
@XmlEnum(
  value=String.class
)
@XmlEnumValue 値をスキーマの型に対応づける
なし
@XmlType クラスをスキーマの型に対応づける
@XmlType(
  name="##default",
  propOrder={""},
  namespace="##default",
  factoryClass=DEFAULT.class,
  factoryMethod=""
)
@XmlRootElement クラスをスキーマの宣言に対応づける
@XmlRootElement(
  name="##default",
  namespace="##default"
)
@XmlAccessorType フィールド,プロパティの対応を決定する
@XmlAccesorType(
  namespace="http://www.w3.org/2001/XMLSchema",
  type=DEFAULT.class
)
@XmlAccessorOrder フィールド,プロパティの対応順序を決める
なし

@XmlEnum

@XmlEnumは,列挙型をXML Schemaで定義された型に対応づけるために使用します。デフォルトは文字列です。

例として血液型を表す列挙型を使用します。

@XmlEnum(String.class)
@XmlType
public enum BloodType {
    A, B, O, AB
}

@XmlEnumの要素に使用するクラスオブジェクトを指定します。上記のソースでは文字列(String.class)を使用しています。

文字列の場合,XML Schemaに対応するのはnameメソッドの戻り値です。たとえば,BloodType.AはBloodType.A.name()がスキーマで使用されます。

  <xs:simpleType name="bloodType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="A"/>
      <xs:enumeration value="B"/>
      <xs:enumeration value="O"/>
      <xs:enumeration value="AB"/>
    </xs:restriction>
  </xs:simpleType>

列挙型は,simpleTypeとenumerationで表されます。ここでは,@XmlEnum(String.class)と指定したので,文字列で表されています。

@XmlEnumの要素に文字列以外を使用したい場合,@XmlEnumValueと組み合わせて使用します。

たとえば,血液型を整数で表す場合には次のようにします。

@XmlEnum(Integer.class)
@XmlType
public enum BloodType {
    @XmlEnumValue("1") A,
    @XmlEnumValue("2") B,
    @XmlEnumValue("3") O,
    @XmlEnumValue("4") AB
}

@XmlEnumで使用するクラスを指定し,値をそのクラスの文字列表現で修飾します。

この列挙型に対応するXML Schemaを次に示します。

  <xs:simpleType name="bloodType">
    <xs:restriction base="xs:int">
      <xs:enumeration value="1"/>
      <xs:enumeration value="2"/>
      <xs:enumeration value="3"/>
      <xs:enumeration value="4"/>
    </xs:restriction>
  </xs:simpleType>

型がintになり,@XmlEnumValueで指定した値が使用されていることが分かります。

この先は会員の登録が必要です。有料会員(月額プラン)は初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら