34.3. 열거형

34.3.1. 개요

XML 스키마에서 열거된 형식은 xsd:enumeration facet를 사용하여 정의된 간단한 유형입니다. atomic 단순 형식과 달리 Java 열거 형에 매핑됩니다.

34.3.2. XML 스키마에서 열거된 유형 정의

열거형은 xsd:enumeration facet를 사용하는 간단한 유형입니다. 각 xsd:enumeration facet는 열거된 형식에 대해 가능한 하나의 값을 정의합니다.

예 34.5. “XML 스키마 정의 Enumeration” 열거된 형식에 대한 정의를 표시합니다.Shows the definition for an enumerated type. 다음과 같은 가능한 값이 있습니다.

  • big
  • large
  • mungo
  • gargantuan

예 34.5. XML 스키마 정의 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 열거형 형식에 자동으로 매핑됩니다. 38.4절. “Enumeration 매핑 사용자 정의” 에 설명된 사용자 지정을 사용하여 다른 기본 유형과 함께 열거를 매핑하도록 코드 생성기에 지시할 수 있습니다.

enum 형식은 다음과 같이 생성됩니다.

  1. 형식의 이름은 단순 형식 정의의 name 특성에서 가져와 Java 식별자로 변환됩니다.

    일반적으로 이는 XML 스키마 이름의 첫 번째 문자를 대문자로 변환하는 것을 의미합니다. XML 스키마 이름의 첫 번째 문자가 유효하지 않은 문자인 경우 아래에 있는_) 앞에 이름이 붙습니다.

  2. 각 열거형 facet에 대해 열거형 상수는 value 특성의 값에 따라 생성됩니다.For each enumeration facet, an enum constant is generated based on the value of the value attribute.

    상수 이름은 값의 모든 소문자를 대문자로 변환하여 파생됩니다.

  3. 열거형의 기본 형식에서 매핑된 Java 형식을 사용하는 생성자가 생성됩니다.A constructor is generated that takes the Java type mapped from the enumeration's base type.
  4. value() 라는 공용 메서드는 형식의 인스턴스로 표시되는 facet 값에 액세스하기 위해 생성됩니다.A public method called value() is generated to access the facet value that is represented by an instance of the type.

    value() 메서드의 반환 유형은 XML 스키마 유형의 기본 유형입니다.

  5. fromValue() 라는 공용 메서드가 생성되어 facet 값을 기반으로 enum 형식의 인스턴스를 만듭니다.

    value() 메서드의 매개 변수 유형은 XML Schema 유형의 기본 유형입니다.

  6. 클래스는 @XmlEnum 주석을 사용하여 장식됩니다.

예 34.5. “XML 스키마 정의 Enumeration” 에 정의된 열거된 유형은 예 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);
    }

}