|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
| 개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 | |||||||||
java.lang.Objectjavax.xml.bind.annotation.adapters.XmlAdapter<ValueType, BoundType>
BoundType - JAXB 가 처리 방법을 모르는 형태. ValueType 를 개입시켜
이 형태를 메모리상의 표현으로서 사용할 수 있도록(듯이) 어댑터는 기술되는ValueType - JAXB 가 처음부터 처리 방법을 알고 있는 형태public abstract class XmlAdapter<ValueType, BoundType>
Java 형을 커스텀 정렬화에 적응시킵니다.
사용법:
일부의 Java 형, 예를 들어,HashMap 또는 그 외의 비 JavaBean 클래스 등은, 그대로는 XML 표현에 맵 되지 않습니다. 반대로, XML 표현은 Java 형에 맵 가능합니다만, 어플리케이션이 다른 Java 형을 사용해 그 XML 표현에 액세스 하는 것을 선택하는 경우도 있습니다. 예를 들어, schema로부터 Java 에의 바인딩 규칙에서는, 디폴트로 xs:dateTime 가 XmlGregorianCalendar 에 바인드 됩니다. 그러나, 어플리케이션이 xs:dateTime 를 커스텀형, 예를 들어, MyXmlGregorianCalendar 에 바인드 하는 것을 바라는 경우도 있습니다. 어느 경우에서도, 어플리케이션이 XML 컨텐츠에 액세스 할 경우에 사용하는 「바운드형」이라고, XML 표현으로 맵 되는 「치 형」의 사이에 불일치가 존재합니다.
이 abstract 클래스는, 바운드형을 치 형에, 또는 그 반대로 적응시키기 위한 메소드를 정의하고 있습니다. 정렬화 및 비정렬화의 실행중에, 이러한 메소드는 JAXB 바인딩 시스템에 의해 불려 갑니다.
XmlJavaTypeAdapter 를 사용해 어댑터를 짜넣습니다. 예: HashMap 의 커스터마이즈 매핑
다음의 예는,@XmlAdapter 과 @XmlJavaTypeAdapter 를 사용해 HashMap 의 매핑을 커스터마이즈 하는 방법을 나타냅니다.
스텝 1: HashMap 에 대한 적절한 XML 표현을 결정합니다.
<hashmap>
<entry key="id123">this is a value</entry>
<entry key="id312">this is another value</entry>
...
</hashmap>
스텝 2: 상기의 XML 표현이 따라야 할 schema 정의를 결정합니다.
<xs:complexType name="myHashMapType">
<xs:sequence>
<xs:element name="entry" type="myHashMapEntryType"
minOccurs = "0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="myHashMapEntryType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="key" type="xs:int"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
스텝 3: 상기의 schema 정의를 생성 가능한 치 형을 기술합니다.
public class MyHashMapType {
List<MyHashMapEntryType> entry;
}
public class MyHashMapEntryType {
@XmlAttribute
public Integer key;
@XmlValue
public String value;
}
스텝 4: 치 형 MyHashMapType 를, 바운드형 HashMap 에 적응시키는 어댑터를 기술합니다. 이것은 어플리케이션에 의해 사용됩니다.
public final class MyHashMapAdapter extends
XmlAdapter<HashMap, MyHashMapType> { ... }
스텝 5: 어댑터를 사용합니다.
public class Foo {
@XmlJavaTypeAdapter(MyHashMapAdapter.class)
HashMap hashmap;
...
}
상기의 코드 fragment는, 다음의 schema에 맵 합니다.
<xs:complexType name="Foo">
<xs:sequence>
<xs:element name="hashmap" type="myHashMapType"
</xs:sequence>
</xs:complexType>
XmlJavaTypeAdapter | 생성자 의 개요 | |
|---|---|
protected |
XmlAdapter ()
상속 클래스용의 아무것도 실행하지 않는 생성자 입니다. |
| 메소드의 개요 | |
|---|---|
abstract ValueType |
marshal (BoundType v)
바운드형을 치 형으로 변환합니다. |
abstract BoundType |
unmarshal (ValueType v)
치 형을 바운드형으로 변환합니다. |
| 클래스 java.lang. Object 로부터 상속된 메소드 |
|---|
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait |
| 생성자 의 상세 |
|---|
protected XmlAdapter()
| 메소드의 상세 |
|---|
public abstract BoundType unmarshal(ValueType v)
throws Exception
v - 변환하는 값. null 도 가능
Exception - 변환중에 에러가 발생했을 경우. 호출측은
ValidationEventHandler 를 개입시켜, 이 에러를 사용자에게 보고한다
public abstract ValueType marshal(BoundType v)
throws Exception
v - 변환하는 값. null 도 가능
Exception - 변환중에 에러가 발생했을 경우. 호출측은
ValidationEventHandler 를 개입시켜, 이 에러를 사용자에게 보고한다
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
| 개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 | |||||||||
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.