34.3. 枚举

概述

在 XML Schema 中,枚举类型是使用 xsd:enumeration facet 定义的简单类型。与 atomic 简单类型不同的是,它们映射到 Java 枚举。

在 XML Schema 中定义枚举类型

枚举是使用 xsd:enumeration facet 的简单类型。每个 xsd:enumeration 都会为枚举类型定义一个可能的值。

例 34.5 “XML Schema Defined Enumeration” 显示枚举类型的定义。它有以下可能的值:

  • big
  • large
  • mungo
  • gargantuan

例 34.5. XML Schema Defined Enumeration

<simpleType name="widgetSize">
  <restriction base="xsd:string">
    <enumeration value="big"/>
    <enumeration value="large"/>
    <enumeration value="mungo"/>
    <enumeration value="gargantuan"/>
  </restriction>

映射到 Java

在基础类型为 xsd:string 的 XML Schema enumerations 会自动映射到 Java enum 类型。您可以使用 第 38.4 节 “自定义枚举映射” 中描述的自定义,指示代码生成器将其他基本类型的枚举映射到 Java 枚举类型。

enum 类型创建如下:

  1. 类型的名称取自简单类型定义的 name 属性,并转换为 Java 标识符。

    通常,这意味着将 XML Schema 名称的第一个字符转换为大写字母。如果 XML Schema 名称的第一个字符是无效字符,则会在名称前带有下划线(_)。

  2. 对于每个 枚举 面,会根据 value 属性的值生成枚举常量。

    恒定的名称是通过将值中的所有小写字母转换为等效的大写。

  3. 生成构造器,它采用从枚举基础类型映射的 Java 类型。
  4. 生成名为 value () 的公共方法,以访问由类型实例表示的 facet 值。

    value () 方法的返回类型是 XML Schema 类型的基本类型。

  5. 生成名为 fromValue () 的公共方法,以根据 facet 值创建 enum 类型的实例。

    value () 方法的参数类型是 XML Schema 类型的基本类型。

  6. 该类通过 @XmlEnum 注释进行解码。

例 34.5 “XML Schema Defined Enumeration” 中定义的枚举类型映射到 例 34.6 “为 String Bases XML Schema 枚举生成枚举类型” 中显示的枚举类型。

例 34.6. 为 String Bases XML Schema 枚举生成枚举类型

@XmlType(name = "widgetSize")
@XmlEnum
public enum WidgetSize {

    @XmlEnumValue("big")
    BIG("big"),
    @XmlEnumValue("large")
    LARGE("large"),
    @XmlEnumValue("mungo")
    MUNGO("mungo"),
    @XmlEnumValue("gargantuan")
    GARGANTUAN("gargantuan");
    private final String value;

    WidgetSize(String v) {
        value = v;
    }

    public String value() {
        return value;
    }

    public static WidgetSize fromValue(String v) {
        for (WidgetSize c: WidgetSize.values()) {
            if (c.value.equals(v)) {
                return c;
            }
        }
        throw new IllegalArgumentException(v);
    }

}