BoundType
- JAXBが処理方法を知らない型。ValueTypeを介してこの型をメモリー内表現として使用できるようにアダプタは記述される。ValueType
- JAXBが初めから処理方法を知っている型。public abstract class XmlAdapter<ValueType,BoundType> extends Object
使用法:
一部の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<MyHashMapType,HashMap> { ... }
ステップ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()
派生クラス用の何も実行しないコンストラクタです。
|
public abstract BoundType unmarshal(ValueType v) throws Exception
v
- 変換する値。nullも可。Exception
- 変換中にエラーが発生した場合。呼出し側はValidationEventHandler
を介して、このエラーをユーザーに報告する。public abstract ValueType marshal(BoundType v) throws Exception
v
- 変換する値。nullも可。Exception
- 変換中にエラーが発生した場合。呼出し側はValidationEventHandler
を介して、このエラーをユーザーに報告する。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.