34.3. Enumerations
概述
在 XML Schema 中,枚举的类型是使用 xsd:enumeration facet 定义的简单类型。与 atomic 简单类型不同,它们映射到 Java 枚举。
在 XML Schema 中定义枚举类型
Enumerations 是使用 xsd:enumeration facet 的简单类型。每个 xsd:enumeration facet 为枚举类型定义一个可能的值。
例 34.5 “XML 架构定义枚举” 显示枚举的类型的定义。它有以下可能的值:
-
big -
大 -
mungo -
gargantuan
例 34.5. XML 架构定义枚举
<simpleType name="widgetSize">
<restriction base="xsd:string">
<enumeration value="big"/>
<enumeration value="large"/>
<enumeration value="mungo"/>
<enumeration value="gargantuan"/>
</restriction>映射到 Java
XML Schema enumerations,其中基本类型为 xsd:string 会自动映射到 Java enum 类型。您可以使用 第 38.4 节 “自定义枚举映射” 中描述的自定义来指示代码生成器与其他基本类型的枚举映射到 Java enum 类型。
enum 类型创建如下:
类型的名称取自简单类型定义的
name属性并转换为 Java 标识符。通常,这意味着将 XML 架构名称的第一个字符转换为大写字母。如果 XML 架构名称的第一个字符是无效字符,则名称前将加上下划线(
_)。对于每个
枚举的问题,会根据value属性的值生成一个枚举常量。常数的名称通过将值中的所有小写字母转换为等效的大写来派生。
- 生成构造器,它将获取从枚举的基本类型映射的 Java 类型。
生成了一个名为
value ()的公共方法来访问由类型实例代表的 facet 值。value ()方法的返回类型是 XML Schema 类型的基本类型。生成了一个名为
fromValue ()的公共方法,以根据 facet 值创建 enum 类型的实例。value ()方法的参数类型是 XML Schema 类型的基本类型。-
类使用
@XmlEnum注释进行解码。
例 34.5 “XML 架构定义枚举” 中定义的枚举类型映射到 例 34.6 “为 String Bases XML Schema Enumeration 生成 Enumerated Type” 中显示的 enum 类型。
例 34.6. 为 String Bases XML Schema Enumeration 生成 Enumerated Type
@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);
}
}