ホーム > X-Plus > XML Square >  デベロッパーズコーナー  >  JavaプログラミングとXML

この記事を送る はてなブックマークに追加する BuzzurlにブックマークBuzzurlにブックマーク Yahoo!ブックマークに登録
テキストリンクコードを取得する

デベロッパーズコーナー:Javaプログラミングを極める「JAXB」-(1)

2004年01月20日作成 

Javaプログラミングを極める
第8回:JAXB

(株)日本ユニテック
太田 純

<この記事はDigital Xpress 2002 Vol.14(4-5月号)に掲載されたものです>

今回は「JAXB(Java Architecture for XML Binding)」を取り上げます。JAXB はXML Schema によるスキーマ定義をJava のクラスにマッピングすることによってアプリケーションの開発効率を向上させるためのツールやAPIをまとめたアーキテクチャです。

アプリケーションでXML文書を扱う際には、DOMやSAXなどのAPIを利用することが多いことと思います。これらのインタフェースは、XML文書を自由自在に操作することができる汎用性の高い機能を持っています。しかしながら、うなコードを何度も記述しなければならないという煩わしさがあり、結果としてバグが混入しやすくなってしまうといえるでしょう。

たとえば、プログラム中で要素名のスペルを間違えて記述していてもコンパイルできてしまい、実行してみて初めてミスに気づくこともあるかもしれません。さらに、DOMを使ってXML データの編集を行った場合、スキーマによる構造定義に合わない要素を追加するようにプログラミングしてしまっても、その時点でエラーが報告されるわけではありません。

XML Schema によるスキーマ定義では整数型や日付型といったデータ型を決めておくこともできますが、DOMによる編集時にはそれらを単なる文字列としてしか扱えません。ですから、ほとんどの場合プログラム内にデータ型やその範囲に関するチェック機能を自分でコーディングすることになるでしょう。これでは、手間がかかるだけでなく、同じ制約条件がスキーマとプログラムに分散するため、メンテナンス性が悪くなります。

JAXB はこれらの問題を解決し、XML アプリケーションの開発効率の向上を実現します。JAXB はデータバインディングという技術により、コーディング作業の簡略化とデータチェックの自動化を実現するのです。

JAXB では、XML Schema で記述したスキーマによって定義されたデータ構造や制約条件を読み込み、そのスキーマに従ったXML データを扱うためのJava クラスを自動的に生成します。このようにして生成されたクラスでは、そのクラス定義とスキーマが適切に対応づけられます。したがって、このクラスを使用して生成されるオブジェクトは、スキーマに従ったXMLデータを表すことが保証されるのです(図1)。


図1:JAXBによるJavaとXMLのバインディング

スキーマコンパイラ

JAXB の中核をなす技術には、「スキーマコンパイラ」と「マーシャリングフレームワーク」の2 つがあります。

スキーマコンパイラとは、スキーマ文書を読み込み、そのスキーマに従ったXML 文書を扱うためのJava クラスを生成するツールです。

図2 にJAXB を利用したアプリケーションの開発プロセスを示しました。スキーマコンパイラが出力するJava ソースファイルには、XML データ中に記述された要素を扱うためのクラスが含まれます。開発者はそれらの自動生成されたクラスを利用することにより、DOM やSAX を用いて煩雑なコーディングをしなくても、XML データを入出力するプログラムを作成することができるのです。

スキーマコンパイラは、以下のような機能を備えたクラスを生成します。

●XML 文書を読み込み、Java のオブジェクトを生成する
●子要素や属性を取得する
●子要素や属性を追加/変更する
●Java のオブジェクトからXML 文書を生成する

さらに、スキーマに基づいて構造やデータ型の妥当性をチェックすることができます。このチェックは、ファイルを読み込むときに自動的に行われるほか、検証用メソッドを明示的に呼び出すことによって任意の時点で実行することもできます。


図2:JAXBを利用した開発プロセス

マーシャリングフレームワーク

マーシャリングフレームワークの機能は、スキーマコンパイラが生成したクラスのオブジェクトとXML データとの間の相互変換を実現することです。

この相互変換機能は、スキーマコンパイラが生成するクラスとJAXB の実装が協調動作することによって実現され、スキーマに従ったデータの入出力を可能にします。入出力の対象となるXML データは必ずしもファイル形式である必要はなく、各種ストリームやDOM/SAX のオブジェクトなども利用できます。

図3 に示したように、Java オブジェクトからXML データを生成するプロセスのことをマーシャル(marshal)と呼び、逆にXML データからJava オブジェクトを生成するプロセスのことをアンマーシャル(unmarshal)と呼びます。


図3:マーシャリングフレームワーク

>>続いて、実際にJAXB を用いたXML アプリケーションの作成例を見ていきましょう。



関連サービス

IT技術およびIT製品の可用性調査・検証業務



この記事と関連の高い記事

関連キーワード:JAXB


関連キーワード:Java


関連キーワード:プログラミング




ページトップへ戻る