38.4. Enumeration 매핑 사용자 정의

38.4.1. 개요

xsd:string 이외의 스키마 형식을 기반으로 열거된 형식을 사용하려면 코드 생성기에 매핑하도록 지시합니다.If you want enumerated types that are based on a schema type other than xsd:string, you must instruct the code generator to map it. 생성된 열거형 상수의 이름을 제어할 수도 있습니다.You can also control the name of the generated enumeration constants.

사용자 지정은 jaxb:typesafeEnumClass 요소와 함께 하나 이상의 jaxb:typesafeEnumMember 요소를 사용하여 수행됩니다.

코드 생성기에 대한 기본 설정이 모든 열거 멤버에 대해 유효한 Java 식별자를 만들 수 없는 인스턴스도 있을 수 있습니다. 전역Bindings 사용자 지정의 특성을 사용하여 코드 생성기에서 이 문제를 처리하는 방법을 사용자 지정할 수 있습니다.You can customize how the code generators handle this by using an attribute of the globalBindings custom.

38.4.2. 멤버 이름 사용자 정의기

코드 생성기의 멤버를 생성할 때 이름 지정 충돌이 발생하거나 열거형 멤버에 유효한 Java ID를 만들 수 없는 경우 코드 생성기는 기본적으로 경고를 생성하고 열거형에 대한 Java 열거형 유형을 생성하지 않습니다.If the code generator encounters a naming collision when generating the members of an enumeration or if it cannot create a valid Java identifier for a member of the enumeration, the code generator, by default, generates a warning and does not generate a Java enum type for the enumeration.

전역Binding 요소의 typesafeEnumMemberName 속성을 추가하여 이 동작을 변경할 수 있습니다. typesafeEnumMemberName 속성 값은 표 38.2. “Customizing Enumeration Member Name Generation의 값” 에 설명되어 있습니다.

표 38.2. Customizing Enumeration Member Name Generation의 값

설명

skipGeneration(default)

Java enum 유형이 생성되지 않고 경고를 생성하도록 지정합니다.

generateName

멤버 이름이 VALUE_N 패턴 뒤에 생성되도록 지정합니다. n은 1에서 시작하여 열거형의 각 멤버에 대해 증가됩니다. N starts off at one, and is incremented for each member of the enumeration.

generateError

열거형을 Java enum 형식에 매핑할 수 없는 경우 코드 생성기가 오류를 생성하도록 지정합니다.Specifies that the code generator generates an error when it cannot map an enumeration to a Java enum type.

예 38.17. “사용자 정의 유형 유형 보안 구성원 이름을 강제 적용” 코드 생성기가 형식 안전한 멤버 이름을 생성하도록 강제 적용하는 인라인 사용자 지정을 보여줍니다.

예 38.17. 사용자 정의 유형 유형 보안 구성원 이름을 강제 적용

<schema targetNamespace="http://widget.com/types/widgetTypes"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.0">
  <annotation>
    <appinfo>
      <jaxb:globalBindings typesafeEnumMemberName="generateName" />
    </appinfo>
  </annotation>
  ...
</schema>

38.4.3. 클래스 사용자 정의 프로그램

jaxb:typesafeEnumClass 요소는 XML 스키마 열거형이 Java enum 형식에 매핑되도록 지정합니다. 여기에는 표 38.3. “생성된 Enumeration 클래스 사용자 정의 특성” 에 설명된 두 가지 속성이 있습니다. jaxb:typesafeEnumClass 요소가 줄에서 지정되면 수정되는 간단한 유형의 xsd:annotation 요소에 배치해야 합니다.

표 38.3. 생성된 Enumeration 클래스 사용자 정의 특성

속성설명

name

생성된 Java 열거형 유형의 이름 지정합니다. 이 값은 유효한 Java 식별자여야 합니다.

map

열거형을 Java enum 형식에 매핑해야 하는지 여부를 지정합니다.Specifies if the enumeration should be mapped to a Java enum type. 기본값은 true입니다.

38.4.4. 멤버 customizer

jaxb:typesafeEnumMember 요소는 XML 스키마 열거형과 Java enum 형식 상 수 간의 매핑을 지정합니다. 사용자 지정할 각 열거형 facet에 대해 하나의 jaxb:typesafeEnumMember 요소를 사용해야 합니다.

인라인 사용자 지정을 사용하는 경우 이 요소를 다음 두 가지 방법 중 하나로 사용할 수 있습니다.

  • 수정되는 열거형 facet의 xsd:annotation 요소 내에 배치할 수 있습니다.
  • 모두 열거형을 사용자 지정하는 데 사용되는 jaxb:typesafeEnumClass 요소의 자식으로 배치할 수 있습니다.

jaxb:typesafeEnumMember 요소에는 필요한 name 속성이 있습니다. name 속성은 생성된 Java enum 형식 상수의 이름을 지정합니다. 값은 유효한 Java 식별자여야 합니다.

jaxb:typesafeEnumMember 요소에도 value 속성이 있습니다. 이 값은 열거 facet를 적절한 jaxb:typesafeEnumMember 요소와 연결하는 데 사용됩니다. value 속성 값은 열거 facets' value 속성의 값 중 하나와 일치해야 합니다. 이 속성은 형식 생성을 사용자 지정하기 위해 외부 바인딩 사양을 사용하거나 jaxb:typesafeEnumMember 요소를 jaxb:typesafeEnumClass 요소의 하위 항목으로 그룹화할 때 필요합니다.

38.4.5. 예제

예 38.18. “Enumerated Type의 줄 사용자 지정” 인라인 사용자 지정을 사용하고 열거형의 멤버를 별도로 사용자 지정하는 열거된 유형을 표시합니다.Shows an enumerated type that uses in-line custom and has the enumeration's members customized separately.

예 38.18. Enumerated Type의 줄 사용자 지정

<schema targetNamespace="http://widget.com/types/widgetTypes"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.0">
  <simpleType name="widgetInteger">
    <annotation>
      <appinfo>
        <jaxb:typesafeEnumClass />
      </appinfo>
    </annotation>
    <restriction base="xsd:int">
      <enumeration value="1">
        <annotation>
          <appinfo>
            <jaxb:typesafeEnumMember name="one" />
          </appinfo>
        </annotation>
      </enumeration>
      <enumeration value="2">
        <annotation>
          <appinfo>
            <jaxb:typesafeEnumMember name="two" />
          </appinfo>
        </annotation>
      </enumeration>
      <enumeration value="3">
        <annotation>
          <appinfo>
            <jaxb:typesafeEnumMember name="three" />
          </appinfo>
        </annotation>
      </enumeration>
      <enumeration value="4">
        <annotation>
          <appinfo>
            <jaxb:typesafeEnumMember name="four" />
          </appinfo>
        </annotation>
      </enumeration>
    </restriction>
  </simpleType>
<schema>

예 38.19. “Combined Mapping을 사용하여 Enumerated Type의 줄 사용자 지정” 는 인라인 사용자 지정을 사용하고 클래스 사용자 지정에서 멤버의 사용자 지정을 결합하는 열거된 유형을 보여줍니다.

예 38.19. Combined Mapping을 사용하여 Enumerated Type의 줄 사용자 지정

<schema targetNamespace="http://widget.com/types/widgetTypes"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.0">
  <simpleType name="widgetInteger">
    <annotation>
      <appinfo>
        <jaxb:typesafeEnumClass>
            <jaxb:typesafeEnumMember value="1" name="one" />
            <jaxb:typesafeEnumMember value="2" name="two" />
            <jaxb:typesafeEnumMember value="3" name="three" />
            <jaxb:typesafeEnumMember value="4" name="four" />
        </jaxb:typesafeEnumClass>
      </appinfo>
    </annotation>
    <restriction base="xsd:int">
      <enumeration value="1" />
      <enumeration value="2" />
      <enumeration value="3" />
      <enumeration value="4" >
    </restriction>
  </simpleType>
<schema>

예 38.20. “Enumeration을 사용자 정의하는 바인딩 파일” 열거된 형식을 사용자 지정하는 외부 바인딩 파일을 표시합니다.

예 38.20. Enumeration을 사용자 정의하는 바인딩 파일

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               jaxb:version="2.0">
  <jaxb:bindings schemaLocation="enumMap.xsd">
    <jaxb:bindings node="xsd:simpleType[@name='widgetInteger']">
        <jaxb:typesafeEnumClass>
            <jaxb:typesafeEnumMember value="1" name="one" />
            <jaxb:typesafeEnumMember value="2" name="two" />
            <jaxb:typesafeEnumMember value="3" name="three" />
            <jaxb:typesafeEnumMember value="4" name="four" />
        </jaxb:typesafeEnumClass>
    </jaxb:bindings>
  </jaxb:bindings>
<jaxb:bindings>