Menu Close

第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 オブジェクトのデータをマーシャリングおよびアンマーシャリングできます。