34.3. 열거
34.3.1. 개요
XML 스키마에서 열거된 형식은 xsd:enumeration facet를 사용하여 정의된 간단한 유형입니다. atomic 간단한 유형과 달리 Java enums에 매핑됩니다.
34.3.2. XML 스키마에 열거된 유형 정의
열거는 xsd:enumeration facet를 사용하는 간단한 유형입니다. 각 xsd:enumeration facet는 열거된 유형에 대해 하나의 가능한 값을 정의합니다.
예 34.5. “XML Schema Defined Enumeration” 열거된 유형의 정의를 표시합니다. 다음과 같은 가능한 값이 있습니다.
-
big -
대규모 -
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>34.3.3. Java에 매핑
기본 유형이 xsd:string 인 XML 스키마 열거는 Java enum 유형에 자동으로 매핑됩니다. 38.4절. “열거 매핑 사용자 정의” 에 설명된 사용자 지정을 사용하여 다른 기본 유형의 열거를 Java enum 유형에 매핑하도록 코드 생성기에 지시할 수 있습니다.
enum 유형은 다음과 같이 생성됩니다.
유형 이름은 간단한 유형 정의의
name속성에서 가져오고 Java 식별자로 변환됩니다.일반적으로 이는 XML 스키마 이름의 첫 번째 문자를 대문자로 변환하는 것을 의미합니다. XML 스키마 이름의 첫 문자가 유효하지 않은 문자이면 아래에 있는
_)가 이름에 추가됩니다.각 열거 facet의 경우 열거 상수는 value 특성의 값을 기반으로 생성됩니다.For each
enumerationfacet, an enum constant is generated based on the value of thevalueattribute.상수의 이름은 값의 소문자를 모두 대문자로 변환하여 파생됩니다.
- 열거의 기본 유형에서 매핑된 Java 유형을 가져오는 생성자가 생성됩니다.A constructor is generated that takes the Java type mapped from the enumeration's base type.
value()라는 공용 메서드는 형식의 인스턴스로 표시되는 facet 값에 액세스하기 위해 생성됩니다.value()메서드의 반환 유형은 XML 스키마 유형의 기본 유형입니다.facet 값을 기반으로 enum 형식의 인스턴스를 만드는 데
fromValue()라는 공용 메서드가 생성됩니다.A public method called fromValue() is generated to create an instance of the enum type based on a facet value.value()메서드의 매개 변수 유형은 XML 스키마 유형의 기본 유형입니다.-
클래스는
@ CryostatEnum주석으로 데코레이팅됩니다.
예 34.5. “XML Schema Defined Enumeration” 에 정의된 열거 유형은 예 34.6. “문자열 기반 XML 스키마 열거에 대해 생성된 Enumerated 유형” 에 표시된 enum 유형에 매핑됩니다.
예 34.6. 문자열 기반 XML 스키마 열거에 대해 생성된 Enumerated 유형
@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);
}
}