38.6. Element 또는 Attribute의 기본 유형 지정
38.6.1. 개요
경우에 따라 요소에 대해 생성된 개체의 클래스를 사용자 지정하거나 XML 스키마 복잡한 유형의 일부로 정의된 특성을 사용자 지정해야 합니다. 예를 들어 간단한 형식 대체를 허용하도록 보다 일반적인 개체 클래스를 사용할 수 있습니다.For example, you might want to use a more generalized class of object to allow for simple type substitution.
이를 수행하는 한 가지 방법은 JAXB 기본 유형 사용자 지정을 사용하는 것입니다. 경우에 따라 개발자가 요소 또는 특성을 나타내기 위해 생성된 오브젝트의 클래스를 지정할 수 있습니다. 기본 유형 사용자 지정을 사용하면 XML 스키마 구문과 생성된 Java 오브젝트 간의 대체 매핑을 지정할 수 있습니다. 이 대체 매핑은 간단한 전문 분야 또는 기본 기본 클래스의 일반화일 수 있습니다. XML 스키마 기본 유형을 Java 클래스에 매핑할 수도 있습니다.
38.6.2. 사용자 정의 사용
XML 스키마 구문에 JAXB 기본 유형 속성을 적용하려면 JAXB baseType
사용자 지정 요소를 사용합니다. baseType
사용자 지정 요소는 JAXB 속성
요소의 자식이므로 적절히 중첩해야 합니다.
XML 스키마 구문의 매핑을 Java 오브젝트에 사용자 지정하는 방법에 따라 baseType
사용자 지정 요소의 name
속성 또는 javaType
하위 요소를 추가합니다. name
특성은 생성된 오브젝트의 기본 클래스를 동일한 클래스 계층 구조 내의 다른 클래스에 매핑하는 데 사용됩니다. javaType
요소는 XML 스키마 기본 유형을 Java 클래스에 매핑하려는 경우 사용됩니다.
동일한 baseType
사용자 지정 요소에서 name
특성과 javaType
하위 요소를 둘 다 사용할 수 없습니다.
38.6.3. 기본 매핑 특수화 또는 일반화
baseType
사용자 지정 요소의 name
특성은 동일한 Java 클래스 계층 구조 내의 클래스에 생성된 개체의 클래스를 재정의하는 데 사용됩니다. 속성은 XML Schema 구문을 매핑할 Java 클래스의 정규화된 이름을 지정합니다. 지정된 Java 클래스는 코드 생성기가 일반적으로 XML Schema 구문에 대해 생성하는 Java 클래스의 슈퍼 클래스 또는 하위 클래스 여야 합니다. Java 기본 유형에 매핑되는 XML 스키마 기본 형식의 경우 래퍼 클래스는 사용자 지정을 위해 기본 기본 클래스로 사용됩니다.
예를 들어 xsd:int
로 정의된 요소는 java.lang.Integer
를 기본 기본 클래스로 사용합니다. name
특성의 값은 Number
또는 Object
와 같은 Integer
의 모든 슈퍼 클래스를 지정할 수 있습니다.
간단한 유형 대체의 경우 가장 일반적인 사용자 지정은 기본 유형을 Object
오브젝트에 매핑하는 것입니다.
예 38.27. “기본 유형의 인라인 사용자 지정” 복잡한 유형의 한 요소를 Java Object
오브젝트에 매핑하는 인라인 사용자 지정을 보여줍니다.
예 38.27. 기본 유형의 인라인 사용자 지정
<complexType name="widgetOrderInfo">
<all>
<element name="amount" type="xsd:int" />
<element name="shippingAdress" type="Address">
<annotation> <appinfo> <jaxb:property> <jaxb:baseType name="java.lang.Object" /> </jaxb:property> </appinfo> </annotation>
</element>
<element name="type" type="xsd:string"/>
</all>
</complexType>
예 38.28. “기본 유형 사용자 지정을 위한 외부 바인딩 파일” 는 예 38.27. “기본 유형의 인라인 사용자 지정” 에 표시된 사용자 지정의 외부 바인딩 파일을 표시합니다.
예 38.28. 기본 유형 사용자 지정을 위한 외부 바인딩 파일
<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:ComplexType[@name='widgetOrderInfo']"> <jaxb:bindings node="xsd:element[@name='shippingAddress']"> <jaxb:property> <jaxb:baseType name="java.lang.Object" /> </jaxb:property> </jaxb:bindings> </jaxb:bindings> </jaxb:bindings> <jaxb:bindings>
결과 Java 오브젝트의 @XmlElement
주석에는 type
속성이 포함됩니다. type
속성의 값은 생성된 개체의 기본 유형을 나타내는 클래스 오브젝트입니다. XML 스키마 기본 형식의 경우 클래스는 해당 Java 기본 유형의 래퍼 클래스입니다.
예 38.29. “수정 기본 클래스가 있는 Java 클래스” 예 38.28. “기본 유형 사용자 지정을 위한 외부 바인딩 파일” 의 스키마 정의에 따라 생성된 클래스를 보여줍니다.
예 38.29. 수정 기본 클래스가 있는 Java 클래스
public class WidgetOrderInfo {
protected int amount;
@XmlElement(required = true)
protected String type;
@XmlElement(required = true, type = Address.class) protected Object shippingAddress;
...
public Object getShippingAddress() {
return shippingAddress;
}
public void setShippingAddress(Object value) {
this.shippingAddress = value;
}
}
38.6.4. javaType 사용
javaType
요소는 XML 스키마 기본 유형을 사용하여 정의된 요소 및 특성이 Java 개체에 매핑되는 방법을 사용자 지정하는 데 사용할 수 있습니다. javaType
요소를 사용하면 baseType
요소의 name
속성을 사용하는 것보다 훨씬 더 유연하게 사용할 수 있습니다. javaType
요소를 사용하면 기본 유형을 오브젝트의 모든 클래스에 매핑할 수 있습니다.
javaType
요소 사용에 대한 자세한 설명은 38.2절. “XML 스키마의 Java 클래스 지정” 을 참조하십시오.