JavaTM Platform
Standard Ed. 6

javax.xml.bind.annotation.adapters
クラス XmlAdapter<ValueType,BoundType>

java.lang.Object
  上位を拡張 javax.xml.bind.annotation.adapters.XmlAdapter<ValueType,BoundType>
型パラメータ:
BoundType - JAXB が処理方法を知らない型。ValueType を介して この型をメモリー上の表現として使用できるようにアダプタは記述される
ValueType - JAXB が初めから処理方法を知っている型
直系の既知のサブクラス:
CollapsedStringAdapter, HexBinaryAdapter, NormalizedStringAdapter

public abstract class XmlAdapter<ValueType,BoundType>
extends Object

Java 型をカスタム整列化に適応させます。

使用法:

一部の Java 型、たとえば、HashMap またはその他の 非 JavaBean クラスなどは、そのままでは XML 表現にマップされません。反対に、XML 表現は Java 型にマップ可能ですが、アプリケーションが別の Java 型を使用してその XML 表現にアクセスすることを選択する場合もあります。たとえば、スキーマから Java へのバインディング規則では、デフォルトで xs:dateTime が XmlGregorianCalendar にバインドされます。しかし、アプリケーションが xs:dateTime をカスタム型、たとえば、MyXmlGregorianCalendar にバインドすることを望む場合もあります。いずれの場合でも、アプリケーションが XML コンテンツにアクセスするときに使用する「バウンド型」と、XML 表現へとマップされる「値型」の間に不一致が存在します。

この abstract クラスは、バウンド型を値型に、またはその逆に適応させるためのメソッドを定義しています。整列化および非整列化の実行中に、これらのメソッドは JAXB バインディングフレームワークによって呼び出されます。

そのため、アダプタの記述は次の手順を含みます。

例: 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>
 

導入されたバージョン:
JAXB 2.0
関連項目:
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
 

コンストラクタの詳細

XmlAdapter

protected XmlAdapter()
派生クラス用の何も実行しないコンストラクタです。

メソッドの詳細

unmarshal

public abstract BoundType unmarshal(ValueType v)
                             throws Exception
値型をバウンド型に変換します。

パラメータ:
v - 変換する値。null も可
例外:
Exception - 変換中にエラーが発生した場合。呼び出し側は ValidationEventHandler を介して、このエラーをユーザーに報告する

marshal

public abstract ValueType marshal(BoundType v)
                           throws Exception
バウンド型を値型に変換します。

パラメータ:
v - 変換する値。null も可
例外:
Exception - 変換中にエラーが発生した場合。呼び出し側は ValidationEventHandler を介して、このエラーをユーザーに報告する

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。