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;
}
}