第39章 JAXBContext オブジェクトの使用
概要
JAXBContext
オブジェクトにより、Apache CXF のランタイムが XML 要素と Java オブジェクト間でデータを変換できます。未加工の XML メッセージを扱うコンシューマーを実装する場合、アプリケーション開発者はメッセージハンドラーで JAXB オブジェクトを使用する JAXBContext
オブジェクトをインスタンス化する必要があります。
概要
JAXBContext
オブジェクトは、ランタイムで使用される低レベルオブジェクトです。これにより、ランタイムは XML 要素とそれに対応する Java 表現の間で変換できます。通常、アプリケーション開発者は JAXBContext
オブジェクトを操作する必要はありません。XML データのマーシャリングとアンマーシャリングは、通常、JAX-WS アプリケーションのトランスポート層とバインディング層によって処理されます。
ただし、アプリケーションが XML メッセージのコンテンツを直接操作する必要がある場合があります。これらの 2 つの例では:
利用可能な 2 つの JAXBContext.newInstance()
メソッドのいずれかを使用して JAXBContext
オブジェクトをインスタンス化する必要があります。
ベストプラクティス
JAXBContext
オブジェクトのインスタンス化には、大量のリソースが必要です。アプリケーションが作成するインスタンスをできるだけ少なくすることを推奨します。これを実行する 1 つの方法は、アプリケーションが使用するすべての JAXB オブジェクトを管理できる単一の JAXBContext
オブジェクトを作成し、アプリケーションの可能な限り多数の部分で共有することです。
JAXBContext
オブジェクトはスレッドセーフです。
オブジェクトファクトリーを使用した JAXBContext オブジェクトの取得
JAXBContext
クラスは、例39.1「クラスを使用した JAXB コンテキストの取得」に示される、JAXB オブジェクトを実装するクラスのリストを取る newInstance()
メソッドを提供します。
例39.1 クラスを使用した JAXB コンテキストの取得
staticJAXBContext
newInstance
Class…
classesToBeBound
JAXBException
返される JAXBObject
オブジェクトは、メソッドに渡されるクラスによって実装される JAXB オブジェクトのデータをマーシャリングおよびアンマーシャリングできます。また、メソッドに渡されたクラスのいずれかから静的に参照されているクラスを操作することもできます。
アプリケーションによって使用されるすべての JAXB クラスの名前を newInstance()
メソッドに渡すことはできますが、効率的ではありません。同じ目標を達成するためのより効率的な方法は、アプリケーション用に生成されたオブジェクトファクトリーまたはオブジェクトファクトリーを渡すことです。結果の JAXBContext
オブジェクトは、指定されたオブジェクトファクトリーがインスタンス化できる JAXB クラスを管理できます。
パッケージ名を使用して JAXBContext オブジェクトを取得する
JAXBContext
クラスは、例39.2「クラスを使用した JAXB コンテキストの取得」に示される、パッケージ名のコロン (:
) 区切りリストを取る newInstance()
メソッドを提供します。指定されたパッケージには、XML スキーマから派生した JAXB オブジェクトが含まれている必要があります。
例39.2 クラスを使用した JAXB コンテキストの取得
staticJAXBContext
newInstance
String
contextPath
JAXBException
返される JAXBContext
オブジェクトは、指定したパッケージのクラスによって実装されるすべての JAXB オブジェクトのデータをマーシャリングおよびアンマーシャリングできます。