|
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 表現にアクセスすることを選択する場合もあります。たとえば、スキーマから 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 表現が従うべきスキーマ定義を決定します。
<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: 上記のスキーマ定義を生成可能である値型を記述します。
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;
...
}
上記のコードフラグメントは、次のスキーマにマップします。
<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 も参照してください。