38.4. 열거 매핑 사용자 정의
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. 생성된 열거 상수의 이름을 제어할 수도 있습니다.
사용자 지정은 jaxb:typesafeEnumClass 요소와 하나 이상의 jaxb:typesafeEnumMember 요소를 사용하여 수행됩니다.
또한 코드 생성기의 기본 설정으로 인해 열거된 모든 멤버에 대해 유효한 Java 식별자를 만들 수 없는 인스턴스가 있을 수 있습니다. globalBindings 사용자 지정 특성을 사용하여 코드 생성기가 이를 처리하는 방법을 사용자 지정할 수 있습니다.
38.4.2. 멤버 이름 사용자 정의
열거 멤버를 생성할 때 코드 생성기가 이름 지정 충돌을 발견하거나 열거 멤버에 대해 유효한 Java 식별자를 만들 수 없는 경우 코드 생성기는 기본적으로 경고를 생성하고 열거에 대한 Java enum 유형을 생성하지 않습니다.
globalBinding 요소의 typesafeEnumMemberName 특성을 추가하여 이 동작을 변경할 수 있습니다. typesafeEnumMemberName 속성의 값은 표 38.2. “열거 멤버 이름 생성 사용자 지정 값” 에 설명되어 있습니다.
표 38.2. 열거 멤버 이름 생성 사용자 지정 값
| 현재의 | 설명 |
|---|---|
|
|
Java |
|
|
|
|
|
열거를 Java |
예 38.17. “Force Type Safe Member Names에 대한 사용자 정의” 코드 생성기가 type safe 멤버 이름을 생성하도록 하는 인라인 사용자 지정을 표시합니다.
예 38.17. Force Type Safe Member Names에 대한 사용자 정의
<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. “생성된 열거 클래스 사용자 지정에 대한 특성” 에 설명된 두 가지 속성이 있습니다. jaxb:typesafeEnumClass 요소가 인라인으로 지정되면 수정 중인 간단한 유형의 xsd:annotation 요소 내에 배치해야 합니다.
표 38.3. 생성된 열거 클래스 사용자 지정에 대한 특성
| 속성 | 설명 |
|---|---|
|
|
생성된 Java |
|
|
열거를 Java |
38.4.4. 멤버 사용자 정의기
jaxb:typesafeEnumMember 요소는 XML 스키마 열거 facet와 Java enum 형식 상수 간의 매핑을 지정합니다. 열거자에서 각 열거면에 대해 하나의 jaxb:typesafeEnumMember 요소를 사용해야 합니다.You must use one jaxb:typesafeEnumMember element for each enumeration facet in the enumeration being customized.
인라인 사용자 지정을 사용하는 경우 다음 두 가지 방법 중 하나로 이 요소를 사용할 수 있습니다.
-
이는 수정 중인
열거facet의xsd:annotation요소 내에 배치할 수 있습니다. -
모두 열거를 사용자 지정하는 데 사용되는
jaxb:typesafeEnumClass요소의 하위 항목으로 배치할 수 있습니다.
jaxb:typesafeEnumMember 요소에는 필요한 name 특성이 있습니다. name 속성은 생성된 Java enum 유형 상수의 이름을 지정합니다. 값은 유효한 Java 식별자여야 합니다.
jaxb:typesafeEnumMember 요소에 값 특성도 있습니다. 이 값은 열거 면을 적절한 jaxb:typesafeEnumMember 요소와 연결하는 데 사용됩니다. value 특성 값은 enum facets' 특성의 값 중 하나와 일치해야 합니다. value 이 속성은 유형 생성을 위해 외부 바인딩 사양을 사용하거나 jaxb:typesafeEnumMember 요소를 jaxb:typesafeEnumClass 요소의 하위 항목으로 그룹화할 때 필요합니다.
38.4.5. 예
예 38.18. “열거된 형식의 인라인 사용자 지정In-line Customization of an Enumerated Type” 인라인 사용자 지정을 사용하고 열거된 멤버가 별도로 사용자 지정된 열거된 형식을 표시합니다.Shows an enumerated type that uses in-line customization and has the enumeration's members customized separately.
예 38.18. 열거된 형식의 인라인 사용자 지정In-line Customization of an 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을 사용하여 열거된 형식의 인라인 사용자 지정In-line Customization of an Enumerated Type Using a Combined Mapping” 인라인 사용자 지정을 사용하고 클래스 사용자 지정에 멤버의 사용자 지정을 결합하는 열거 형식을 표시합니다.
예 38.19. Combined Mapping을 사용하여 열거된 형식의 인라인 사용자 지정In-line Customization of an Enumerated Type Using a Combined Mapping
<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. “열거 사용자 지정을 위한 바인딩 파일” 열거된 유형을 사용자 지정하는 외부 바인딩 파일을 표시합니다.Shows an external binding file that customizes an enumerated type.
예 38.20. 열거 사용자 지정을 위한 바인딩 파일
<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>