BoundType
- Jakarta XML Binding が扱い方を知らない型。この型を ValueType
を介してメモリ内表現として使用できるようにアダプターが作成されています。ValueType
- Jakarta XML Binding がすぐに利用できる処理する方法を知っている型。public abstract class XmlAdapter<ValueType,BoundType> extends ObjectSE
使用法:
HashMap
やその他の非 JavaBean クラスなど、一部の Java 型は XML 表現に自然にマップされません。逆に、XML 表現は Java 型にマップできますが、アプリケーションは別の Java 型を使用して XML 表現にアクセスすることを選択できます。例: スキーマから Java へのバインディングルールは、デフォルトで xs:DateTime を XmlGregorianCalendar にバインドします。ただし、アプリケーションは、xs:DateTime をカスタム型、たとえば MyXmlGregorianCalendar にバインドすることを望む場合があります。どちらの場合も、アプリケーションが XML コンテンツにアクセスするために使用するバインドされた型と XML 表現にマップされる値型の間に不一致があります。
この抽象クラスは、バインドされた型を値型に、またはその逆に適応させるためのメソッドを定義します。メソッドは、マーシャリングおよびアンマーシャリング中に Jakarta XML Binding バインディングフレームワークによって呼び出されます。
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() 派生クラスの何もしないコンストラクター。 |
修飾子と型 | メソッドと説明 |
---|---|
abstract ValueType | marshal(BoundType v) バインドされた型を値型に変換します。 |
abstract BoundType | unmarshal(ValueType v) 値型をバインドされた型に変換します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public abstract BoundType unmarshal(ValueType v) throws ExceptionSE
v
- 変換される値。null にすることができます。ExceptionSE
- 変換中にエラーが発生した場合。呼び出し元は、ValidationEventHandler
を介してユーザーにエラーを報告する責任があります。public abstract ValueType marshal(BoundType v) throws ExceptionSE
v
- 収束する値。null にすることができます。ExceptionSE
- 変換中にエラーが発生した場合。呼び出し元は、ValidationEventHandler
を介してユーザーにエラーを報告する責任があります。Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.