Menu Close
35.3. 単純型からの複合型の派生
概要
Apache CXF は、複合型の単純型からの派生をサポートします。単純型の定義では、サブ要素や属性は含まれません。そのため、単純型から複合型を派生する主な理由の 1 つは、属性を単純型に追加することです。
単純型から複合型を派生する方法は 2 つあります。
エクステンションによる派生
例35.12「エクステンションによる単純型からの複合型の派生」に、currency 属性を追加するために、エクステンションにより xsd:decimal
プリミティブ型から派生した複合型 internationalPrice
の例を示します。
例35.12 エクステンションによる単純型からの複合型の派生
<complexType name="internationalPrice"> <simpleContent> <extension base="xsd:decimal"> <attribute name="currency" type="xsd:string"/> </extension> </simpleContent> </complexType>
simpleContent
要素は、新しい型にサブ要素が含まれていないことを示します。extension
要素は、新しい型が xsd:decimal
を拡張することを指定します。
制限による派生
例35.13「制限による単純型からの複合型の派生」に、制限により xsd:string
から派生した複合型 idType
の例を示しています。定義される型は、xsd:string
の値を長さ 10 文字の値に制限します。また、型に属性を追加します。
例35.13 制限による単純型からの複合型の派生
<complexType name="idType"> <simpleContent> <restriction base="xsd:string"> <length value="10" /> <attribute name="expires" type="xsd:dateTime" /> </restriction> </simpleContent> </complexType>
例35.12「エクステンションによる単純型からの複合型の派生」の場合のように、simpleContent
要素は新しい型に子が含まれていないことを示します。この例では、restriction
要素を使用して、新規型で使用できる値を制限します。attribute
要素は、新しい型に要素を追加します。
Java へのマッピング
単純型から派生する複合型は、@XmlType
アノテーションが付けられた Java クラスにマッピングされます。生成されるクラスには、複合型が派生する単純型のメンバー変数 value
が含まれます。メンバー変数には @XmlValue
アノテーションが付けられます。クラスには、getValue()
メソッドと setValue()
メソッドも含まれます。さらに、生成されるクラスには、単純型を拡張する各属性について、メンバー変数ならびに関連するジッターおよびセッターメソッドが含まれます。
例35.14「idType Java クラス」に、例35.13「制限による単純型からの複合型の派生」で定義される idType
型に生成される Java クラスを示します。
例35.14 idType Java クラス
@XmlType(name = "idType", propOrder = { "value" }) public class IdType { @XmlValue protected String value; @XmlAttribute @XmlSchemaType(name = "dateTime") protected XMLGregorianCalendar expires; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public XMLGregorianCalendar getExpires() { return expires; } public void setExpires(XMLGregorianCalendar value) { this.expires = value; } }