35.4. 从复杂类型派生复杂类型
概述 复制链接链接已复制到粘贴板!
使用 XML Schema,您可以通过使用 complexContent
元素扩展或限制其他复杂类型来生成新的复杂类型。当生成 Java 类来代表派生的复杂类型时,Apache CXF 会扩展基本类型的类。这样,生成的 Java 代码会保留 XML 架构中所预期的继承层次结构。
模式语法 复制链接链接已复制到粘贴板!
您可以使用 complexContent
元素以及 extension
元素或 limitations 元素从其他复杂类型获取复杂类型。complexContent
元素指定包含的数据描述包含多个字段。extension
元素和 limit
元素(即 complexContent
元素的子项)指定要修改的基本类型以创建新类型。基本类型由 base
属性指定。
扩展复杂类型 复制链接链接已复制到粘贴板!
要扩展复杂类型,请使用 extension
元素来定义组成新类型的额外元素和属性。作为新类型定义的一部分,允许复杂类型描述中允许的所有元素。例如,您可以向新类型添加匿名枚举,或者您可以使用 choice
元素来指定每次只有一个新字段可以有效。
例 35.15 “根据扩展派生复杂类型” 显示一个 XML 架构片段,用于定义两个复杂的类型,即 widgetOrderInfo
和 widgetOrderBillInfo
。widgetOrderBillInfo
通过扩展 widgetOrderInfo
来包括两个新元素: orderNumber
和 amtDue
。
例 35.15. 根据扩展派生复杂类型
限制复杂类型 复制链接链接已复制到粘贴板!
要限制复杂类型,请使用 limit 元素来限制基本类型的元素或属性的可能值。在限制复杂类型时,您必须列出基本类型的所有元素和属性。对于每个元素,您可以在定义中添加限制的属性。例如,您可以在元素中添加
maxOccurs
属性来限制它可能发生的次数。您还可以使用 fixed
属性强制一个或多个元素具有预先确定的值。
例 35.16 “通过 Restriction 定义复杂类型” 演示了通过限制另一个复杂类型来定义复杂类型的示例。restricted 类型 wallawallaAddress
只能用于 Walla Walla, Washington 中的地址,因为 city
元素的值、state
元素和 zipCode
元素的值已被修复。
例 35.16. 通过 Restriction 定义复杂类型
映射到 Java 复制链接链接已复制到粘贴板!
与所有复杂类型一样,Apache CXF 会生成一个类来代表从另一个复杂类型派生的复杂类型。为派生复杂类型生成的 Java 类扩展为支持基本复杂类型生成的 Java 类。基本 Java 类也被修改为包含 @XmlSeeAlso
注释。基本类的 @XmlSeeAlso
注释列出了扩展基本类的所有类。
当新的复杂类型由扩展派生时,生成的类将包括所有添加的元素和属性的成员变量。新成员变量将根据与所有其他元素相同的映射生成。
当新的复杂类型由限制派生时,生成的类将没有新的成员变量。生成的类将只是不提供任何其他功能的 shell。完全允许您确保强制实施 XML 架构中定义的限制。
例如,例 35.15 “根据扩展派生复杂类型” 中的 schema 生成两个 Java 类: WidgetOrderInfo
和 WidgetBillOrderInfo
。WidgetOrderBillInfo
扩展 WidgetOrderInfo
,因为 widgetOrderBillInfo
派生自 widgetOrderInfo
的扩展。例 35.17 “WidgetOrderBillInfo” 显示为 widgetOrderBillInfo
生成的类。
例 35.17. WidgetOrderBillInfo