35.3. 从简单类型中解除复杂类型
概述
Apache CXF 支持从简单类型分离复杂类型。一个简单的类型具有定义,既不是子元素或属性。因此,从简单类型推断复杂类型的主要原因之一是将属性添加到简单类型。
从简单类型划分复杂类型的方法有两种:
通过扩展来激活
例 35.12 “通过 Extension 从简单类型中解除 complex 类型” 显示根据 xsd:decimal
primitive 类型(包括货币属性)的扩展提供的复杂类型 internationalPrice
的示例。
例 35.12. 通过 Extension 从简单类型中解除 complex 类型
<complexType name="internationalPrice"> <simpleContent> <extension base="xsd:decimal"> <attribute name="currency" type="xsd:string"/> </extension> </simpleContent> </complexType>
simpleContent
元素表示新类型不包含任何子元素。extension
元素指定新类型扩展了 xsd:decimal
。
按限制设置
例 35.13 “根据限制从简单类型中解除 complex 类型” 显示一个复杂类型 idType
的示例,它按 xsd:string
中的限制衍生。定义的类型将 xsd:string
的可能值限制为长度为 10 个字符的值。它还向类型添加一个属性。
例 35.13. 根据限制从简单类型中解除 complex 类型
<complexType name="idType"> <simpleContent> <restriction base="xsd:string"> <length value="10" /> <attribute name="expires" type="xsd:dateTime" /> </restriction> </simpleContent> </complexType>
在 例 35.12 “通过 Extension 从简单类型中解除 complex 类型” 中,与 简单内容
元素信号一样,新类型不包含任何子项。本例使用 restricted 元素
来限制新类型中使用的可能值。属性
元素将元素添加到新类型。
映射到 Java
派生自简单类型的复杂类型映射到使用 @XmlType
注释分离的 Java 类。生成的类包含成员变量,即从中派生复杂类型的简单类型。member 变量通过
@XmlValue
注释进行解码。该类还具有 getValue ()
方法和 setValue ()
方法。另外,生成的类具有成员变量,以及关联的 getter 和 setter 方法,用于扩展简单类型的每个属性。
例 35.14 “idType Java Class” 显示为 例 35.13 “根据限制从简单类型中解除 complex 类型” 中定义的 idType
类型生成的 Java 类。
例 35.14. idType Java Class
@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; } }