第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 コンテキストの取得

staticJAXBContextnewInstanceClass…​classesToBeBoundJAXBException

返される JAXBObject オブジェクトは、メソッドに渡されるクラスによって実装される JAXB オブジェクトのデータをマーシャリングおよびアンマーシャリングできます。また、メソッドに渡されたクラスのいずれかから静的に参照されているクラスを操作することもできます。

アプリケーションによって使用されるすべての JAXB クラスの名前を newInstance() メソッドに渡すことはできますが、効率的ではありません。同じ目標を達成するためのより効率的な方法は、アプリケーション用に生成されたオブジェクトファクトリーまたはオブジェクトファクトリーを渡すことです。結果の JAXBContext オブジェクトは、指定されたオブジェクトファクトリーがインスタンス化できる JAXB クラスを管理できます。

パッケージ名を使用して JAXBContext オブジェクトを取得する

JAXBContext クラスは、例39.2「クラスを使用した JAXB コンテキストの取得」に示される、パッケージ名のコロン (:) 区切りリストを取る newInstance() メソッドを提供します。指定されたパッケージには、XML スキーマから派生した JAXB オブジェクトが含まれている必要があります。

例39.2 クラスを使用した JAXB コンテキストの取得

staticJAXBContextnewInstanceStringcontextPathJAXBException

返される JAXBContext オブジェクトは、指定したパッケージのクラスによって実装されるすべての JAXB オブジェクトのデータをマーシャリングおよびアンマーシャリングできます。