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

}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.