@RetentionSE(valueSE=RUNTIMESE) @TargetSE(valueSE=TYPESE) public @interface XmlType
クラスまたは列挙型を XML スキーマ型にマップします。
使用方法
@XmlType
アノテーションは、次のプログラム要素で使用できます。
追加の共通情報については、jakarta.xml.bind.package javadoc の「パッケージ仕様」を参照してください。
クラスは XML スキーマ型にマップされます。クラスは、プロパティとフィールドで表される値のデータコンテナーです。スキーマ型は、スキーマ型のコンテンツモデル(モデルグループ、属性など)内のスキーマコンポーネントによって表される値のデータコンテナーです。
マップするには、クラスにパブリックの引数なしのコンストラクターまたは静的な引数なしのファクトリメソッドが必要です。静的ファクトリメソッドは、factoryMethod()
および factoryClass()
アノテーション要素で指定できます。静的ファクトリメソッドまたは引数なしのコンストラクターは、このクラスのインスタンスを作成するためにマーシャリング解除中に使用されます。両方が存在する場合、静的ファクトリメソッドは引数なしのコンストラクターをオーバーライドします。
クラスは、XML スキーマ複合型または XML スキーマ単純型のいずれかにマップされます。XML スキーマ型は、クラス内に含まれる JavaBean プロパティとフィールドのマッピングに基づいて導出されます。クラスがマップされるスキーマ型は、名前付きまたは匿名のいずれかです。クラスに @XmlType(name="")
アノテーションを付けることにより、クラスを匿名スキーマ型にマップできます。
グローバル要素、ローカル要素、ローカル属性のいずれかを、次のように匿名型に関連付けることができます。
XmlRootElement
アノテーションを付けることで派生できます。以下の例 3 を参照してください。@XmlType(name="")
アノテーションが付けられている場合は、匿名型にマップされます。それ以外の場合、クラス名は複合型名にマップされます。XmlName()
アノテーション要素を使用して、名前をカスタマイズできます。propOrder()
を使用して、コンテンツモデルを xs:all
または xs:sequence
にカスタマイズできます。xs:sequence
の XML 要素の順序を指定するために使用されます。namespace()
を使用してカスタマイズできます。クラスを XML スキーマの単純型にマッピングする
クラスは、@XmlValue
アノテーションを使用して XML スキーマ単純型にマップできます。詳細と例については、@XmlValue
アノテーション型を参照してください。
次の表は、クラスの XML スキーマ複合型または単純型へのマッピングを示しています。表で使用されている表記記号は次のとおりです。
@XmlValue
プロパティ ]: @XmlValue
でアノテーションが付けられた JavaBean プロパティ
クラスを XML スキーマの単純型にマッピングする ターゲット propOrder ClassBody ComplexType SimpleType クラス {} [ プロパティ ] +-> 要素 complexcontent
xs:allクラス 空でない [ プロパティ ] +-> 要素 complexcontent
xs:sequenceクラス X プロパティなし -> 要素 complexcontent
空のシーケンスクラス X 1 [ @XmlValue
プロパティ ] &&
[ プロパティ ] +-> 属性simplecontent クラス X 1 [ @XmlValue
プロパティ ] &&
プロパティなし -> 属性simpletype
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(); } }
XmlElement
, XmlAttribute
, XmlValue
, XmlSchema
修飾子と型 | オプションの要素と説明 |
---|---|
ClassSE | factoryClass このクラスのインスタンスを作成するための引数なしのファクトリメソッドを含むクラス。 |
StringSE | factoryMethod factoryClass factoryClass() で指定されたクラスの引数なしファクトリメソッドの名前。 |
StringSE | name クラスがマップされる XML スキーマ型の名前。 |
StringSE | namespace XML スキーマ型のターゲット名前空間の名前。 |
StringSE[] | propOrder クラスが XML スキーマ複合型にマップされるときの XML スキーマ要素の順序を指定します。 |
public abstract StringSE name
public abstract StringSE[] propOrder
propOrder がクラスのマッピングにどのように影響するかについては表を参照してください
propOrder は、クラス内の JavaBean プロパティの名前のリストです。リスト内の各名前は、JavaBean プロパティの Java 識別子の名前です。JavaBean プロパティがリストされる順序は、JavaBean プロパティがマップされる XML スキーマ要素の順序です。
XML スキーマ要素にマップされているすべての JavaBean プロパティをリストする必要があります。
propOrder にリストされている JavaBean プロパティまたはフィールドは、一時的なものであったり、@XmlTransient
でアノテーションが付けられていたりしてはなりません。
JavaBean プロパティのデフォルトの順序は、@XmlAccessorOrder
によって決定されます。
public abstract StringSE namespace
public abstract ClassSE factoryClass
factoryClass
が DEFAULT.class で、factoryMethod
が "" の場合、静的ファクトリメソッドはありません。
factoryClass
が DEFAULT.class であり、factoryMethod
が "" でない場合、factoryMethod
はこのクラスの静的ファクトリメソッドの名前です。
factoryClass
が DEFAULT.class でない場合、factoryMethod
は "" であってはならず、factoryClass
で指定された静的ファクトリメソッドの名前である必要があります。
public abstract StringSE factoryMethod
factoryClass
factoryClass() で指定されたクラスの引数なしファクトリメソッドの名前。Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.