アノテーション型 XmlType
@RetentionSE(RUNTIMESE) @TargetSE(TYPESE) public @interface XmlType
クラスまたは列挙型を XML スキーマ型にマップします。
使用方法
@XmlType
アノテーションは、次のプログラム要素で使用できます。- トップレベルのクラス
- 列挙型
追加の共通情報については、jakarta.xml.bind.package javadoc の「パッケージ仕様」を参照してください。
クラスのマッピング
クラスは XML スキーマ型にマップされます。クラスは、プロパティとフィールドで表される値のデータコンテナーです。スキーマ型は、スキーマ型のコンテンツモデル(モデルグループ、属性など)内のスキーマコンポーネントによって表される値のデータコンテナーです。
マップするには、クラスにパブリックの引数なしのコンストラクターまたは静的な引数なしのファクトリメソッドが必要です。静的ファクトリメソッドは、
factoryMethod()
およびfactoryClass()
アノテーション要素で指定できます。静的ファクトリメソッドまたは引数なしのコンストラクターは、このクラスのインスタンスを作成するためにマーシャリング解除中に使用されます。両方が存在する場合、静的ファクトリメソッドは引数なしのコンストラクターをオーバーライドします。クラスは、XML スキーマ複合型または XML スキーマ単純型のいずれかにマップされます。XML スキーマ型は、クラス内に含まれる JavaBean プロパティとフィールドのマッピングに基づいて導出されます。クラスがマップされるスキーマ型は、名前付きまたは匿名のいずれかです。クラスに
@XmlType(name="")
アノテーションを付けることにより、クラスを匿名スキーマ型にマップできます。グローバル要素、ローカル要素、ローカル属性のいずれかを、次のように匿名型に関連付けることができます。
- グローバル要素: 匿名型のグローバル要素は、クラスに @
XmlRootElement
アノテーションを付けることで派生できます。以下の例 3 を参照してください。 - ローカル要素: @XmlType(name = "")でアノテーションが付けられたクラスを参照し、匿名型に関連付けられた要素にマップされる JavaBean プロパティ。以下の例 4 を参照してください。
- 属性: @XmlType(name = "")でアノテーションが付けられたクラスを参照し、匿名型に関連付けられた属性にマップされる JavaBean プロパティ。以下の例 5 を参照してください。
- クラスに
@XmlType(name="")
アノテーションが付けられている場合は、匿名型にマップされます。それ以外の場合、クラス名は複合型名にマップされます。XmlName()
アノテーション要素を使用して、名前をカスタマイズできます。 - 要素にマップされるプロパティとフィールドは、複合型内のコンテンツモデルにマップされます。アノテーション要素
propOrder()
を使用して、コンテンツモデルをxs:all
またはxs:sequence
にカスタマイズできます。xs:sequence
の XML 要素の順序を指定するために使用されます。 - プロパティとフィールドは、複合型内の属性にマップできます。
- XML スキーマ型のターゲット名前空間は、アノテーション要素
namespace()
を使用してカスタマイズできます。
クラスを XML スキーマの単純型にマッピングする
クラスは、
@XmlValue
アノテーションを使用して XML スキーマ単純型にマップできます。詳細と例については、@XmlValue
アノテーション型を参照してください。次の表は、クラスの XML スキーマ複合型または単純型へのマッピングを示しています。表で使用されている表記記号は次のとおりです。
- -> : マッピングを表します
- [x] +: x の 1 つ以上の出現箇所
- [
@XmlValue
プロパティ ]:@XmlValue
でアノテーションが付けられた JavaBean プロパティ - X : 気にしない
クラスを XML スキーマの単純型にマッピングする ターゲット propOrder ClassBody ComplexType SimpleType クラス {} [ プロパティ ] +-> 要素 complexcontent
xs:allクラス 空でない [ プロパティ ] +-> 要素 complexcontent
xs:sequenceクラス X プロパティなし -> 要素 complexcontent
空のシーケンスクラス X 1 [ @XmlValue
プロパティ ] &&
[ プロパティ ] +-> 属性simplecontent クラス X 1 [ @XmlValue
プロパティ ] &&
プロパティなし -> 属性simpletype 列挙型のマッピング
列挙型は、列挙ファセットを持つ XML スキーマの単純型にマップされます。次のアノテーション要素は意味がないため無視されます:propOrder()
、factoryMethod()
、factoryClass()
。他のアノテーションとの使用
このアノテーションは、
XmlRootElement
、XmlAccessorOrder
、XmlAccessorType
、XmlEnum
のアノテーションとともに使用できます。ただし、このアノテーションが列挙型で使用される場合、XmlAccessorOrder
およびXmlAccessorType
は無視されます。例 1: JavaBean プロパティの順序をカスタマイズして、xs:sequence を使用してクラスを複合型にマップします。
@XmlType(propOrder={"street", "city" , "state", "zip", "name" }) public class USAddress { String getName() {..}; void setName(String) {..}; String getStreet() {..}; void setStreet(String) {..}; String getCity() {..}; void setCity(String) {..}; String getState() {..}; void setState(String) {..}; java.math.BigDecimal getZip() {..}; void setZip(java.math.BigDecimal) {..}; }
<!-- XML Schema mapping for USAddress --> <xs:complexType name="USAddress"> <xs:sequence> <xs:element name="street" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:decimal"/> <xs:element name="name" type="xs:string"/> </xs:all> </xs:complexType>
例 2: xs:all を使用してクラスを複合型にマップします
@XmlType(propOrder={}) public class USAddress { ...}
<!-- XML Schema mapping for USAddress --> <xs:complexType name="USAddress"> <xs:all> <xs:element name="name" type="xs:string"/> <xs:element name="street" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:decimal"/> </xs:sequence> </xs:complexType>
例 3: クラスを匿名型のグローバル要素にマップします。
@XmlRootElement @XmlType(name="") public class USAddress { ...}
<!-- XML Schema mapping for USAddress --> <xs:element name="USAddress"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="street" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element>
例 4: プロパティを匿名型のローカル要素にマップします。
//Example: Code fragment public class Invoice { USAddress addr; ... } @XmlType(name="") public class USAddress { ... } }
<!-- XML Schema mapping for USAddress --> <xs:complexType name="Invoice"> <xs:sequence> <xs:element name="addr"> <xs:complexType> <xs:element name="name", type="xs:string"/> <xs:element name="city", type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:decimal"/> </xs:complexType> ... </xs:sequence> </xs:complexType>
例 5: プロパティを匿名型の属性にマップします。
//Example: Code fragment public class Item { public String name; @XmlAttribute public USPrice price; } // map class to anonymous simple type. @XmlType(name="") public class USPrice { @XmlValue public java.math.BigDecimal price; }
<!-- Example: XML Schema fragment --> <xs:complexType name="Item"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:attribute name="price"> <xs:simpleType> <xs:restriction base="xs:decimal"/> </xs:simpleType> </xs:attribute> </xs:sequence> </xs:complexType>
例 6: factoryClass と factoryMethod を定義する
@XmlType(name="USAddressType", factoryClass=USAddressFactory.class, factoryMethod="getUSAddress") public class USAddress { private String city; private String name; private String state; private String street; private int zip; public USAddress(String name, String street, String city, String state, int zip) { this.name = name; this.street = street; this.city = city; this.state = state; this.zip = zip; } } public class USAddressFactory { public static USAddress getUSAddress(){ return new USAddress("Mark Baker", "23 Elm St", "Dayton", "OH", 90952); }
例 7: factoryMethod を定義し、デフォルトの factoryClass を使用する
@XmlType(name="USAddressType", factoryMethod="getNewInstance") public class USAddress { private String city; private String name; private String state; private String street; private int zip; private USAddress() {} public static USAddress getNewInstance(){ return new USAddress(); } }
- 導入:
- 1.6、JAXB 2.0
- 作成者:
- Sekhar Vajjhala, Sun Microsystems, Inc.
- 関連事項:
XmlElement
,XmlAttribute
,XmlValue
,XmlSchema
オプション要素のサマリー
オプション要素 修飾子と型 オプションの要素 説明 ClassSE<?>
factoryClass
このクラスのインスタンスを作成するための引数なしのファクトリメソッドを含むクラス。StringSE
factoryMethod
factoryClass
factoryClass() で指定されたクラスの引数なしファクトリメソッドの名前。StringSE
name
クラスがマップされる XML スキーマ型の名前。StringSE
namespace
XML スキーマ型のターゲット名前空間の名前。StringSE[]
propOrder
クラスが XML スキーマ複合型にマップされるときの XML スキーマ要素の順序を指定します。
要素の詳細
name
StringSE name
クラスがマップされる XML スキーマ型の名前。- デフォルト:
- "##default"
propOrder
StringSE[] propOrder
クラスが XML スキーマ複合型にマップされるときの XML スキーマ要素の順序を指定します。propOrder がクラスのマッピングにどのように影響するかについては表を参照してください
propOrder は、クラス内の JavaBean プロパティの名前のリストです。リスト内の各名前は、JavaBean プロパティの Java 識別子の名前です。JavaBean プロパティがリストされる順序は、JavaBean プロパティがマップされる XML スキーマ要素の順序です。
XML スキーマ要素にマップされているすべての JavaBean プロパティをリストする必要があります。
propOrder にリストされている JavaBean プロパティまたはフィールドは、一時的なものであったり、
@XmlTransient
でアノテーションが付けられていたりしてはなりません。JavaBean プロパティのデフォルトの順序は、@
XmlAccessorOrder
によって決定されます。- デフォルト:
- {""}
namespace
StringSE namespace
XML スキーマ型のターゲット名前空間の名前。デフォルトでは、これはクラスを含むパッケージがマップされるターゲット名前空間です。- デフォルト:
- "##default"
factoryClass
ClassSE<?> factoryClass
このクラスのインスタンスを作成するための引数なしのファクトリメソッドを含むクラス。デフォルトはこのクラスです。factoryClass
が DEFAULT.class で、factoryMethod
が "" の場合、静的ファクトリメソッドはありません。factoryClass
が DEFAULT.class であり、factoryMethod
が "" でない場合、factoryMethod
はこのクラスの静的ファクトリメソッドの名前です。factoryClass
が DEFAULT.class でない場合、factoryMethod
は "" であってはならず、factoryClass
で指定された静的ファクトリメソッドの名前である必要があります。- デフォルト:
- jakarta.xml.bind.annotation.XmlType.DEFAULT.class
factoryMethod
StringSE factoryMethod
factoryClass
factoryClass() で指定されたクラスの引数なしファクトリメソッドの名前。- デフォルト:
- ""