|
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 도 참조해 주세요.