先週に引きつづき,今週もJAXBで使われるアノテーションを紹介していきます。今週は列挙型を修飾するアノテーションと,フィールド/プロパティを修飾するアノテーションです。
その後,実際にJavaのクラスからスキーマを生成させる方法を紹介します。
列挙型を修飾するアノテーション
列挙型は特殊なクラスなので,クラスを修飾するアノテーションはすべて使用することができます。それ以外に@XmlEnumと@XmlEnumValueが使用できます。
アノテーション名 | 説明/デフォルト値 |
---|---|
@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で指定した値が使用されていることが分かります。