Java™ Architecture for XML Binding (JAXB) ランタイムを使用して、XML インスタンス文書を操作します。
始める前に
JAXB を使用して、スキーマ・コンパイラー
xjc コマンドによって XML スキーマから Java クラスを生成するか、
スキーマ・ジェネレーター
schemagen コマンドによって Java クラスから XML スキーマを生成します。
このタスクについて
JAXB API およびツールを使用して、XML スキーマと Java クラスの間のマッピングを確立します。
データ・バインディングが存在するようになった後で、
JAXB バインディング・ランタイム API を使用して、XML インスタンス文書と
Java オブジェクトの間で双方向に変換します。
XML 文書に保管されているデータには、そのデータ構造を理解していなくてもアクセスすることができます。
JAXB のアノテーションを付けたクラスと成果物には、JAXB ランタイム API が XML インスタンス文書を処理するために必要とするすべての情報が含まれています。
JAXB ランタイム API は、JAXB オブジェクトの XML へのマーシャルと、XML 文書の JAXB クラス・インスタンスへのアンマーシャルを行えるようにします。
手順
- JAXB オブジェクトを XML インスタンス文書にマーシャルします。
JAXB ランタイム API を使用して、JAXB オブジェクト・オブジェクトを XML インスタンス文書にマーシャルまたは変換します。
- JAXB クラスをインスタンス化します。
- JAXB マーシャラーを呼び出します。
この例は、アプリケーション内で生成された JAXB オブジェクトをインスタンス化する方法、および JAXBContext クラスと JAXB ランタイム・マーシャラー API を使用して
JAXB オブジェクトを XML インスタンスにマーシャルする方法を示しています。
JAXBContext jc = JAXBContext.newInstance("myPackageName");
//Create marshaller
Marshaller m = jc.createMarshaller();
//Marshal object into file.
m.marshal(myJAXBObject, myOutputStream);
JAXB Reference Implementation には、ベンダー固有のマーシャラー・プロパティー
(JAXB 仕様には定義されていない名前空間プレフィックス・マッピング、インデント、文字エスケープ制御など) が補足説明されています。
これらのプロパティーを使用して、マーシャル・プロセスの追加コントロールを指定することができます。
これらのプロパティーは、JAXB Reference Implementation のみで作動し、他の JAXB プロバイダーでは作動しません。
ベンダー固有のプロパティーに関する追加情報は、
Java Architecture for XML Binding JAXB RI Vendor Extensions Runtime
Properties 仕様にあります。
- XML ファイルを JAXB オブジェクトにアンマーシャルします。
JAXB ランタイム API を使用して、XML インスタンス文書を JAXB オブジェクト・オブジェクトにアンマーシャルまたは変換します。
- 既存の XML インスタンス文書を取得します。
- JAXB アンマーシャラーを呼び出します。
この例は、XML 文書を読み取り、その XML 文書を JAXB オブジェクト・インスタンスにアンマーシャルまたは変換するプログラムを示しています。
JAXBContext クラスと JAXB runtime Unmarshaller API を使用して、XML 文書をアンマーシャルします。
JAXBContext jc = JAXBContext.newInstance("myPackageName");
//Create unmarshaller
Unmarshaller um = jc.createUnmarshaller();
//Unmarshal XML contents of the file myDoc.xml into your Java
object instance.
MyJAXBObject myJAXBObject = (MyJAXBObject)
um.unmarshal(new java.io.FileInputStream( "myDoc.xml" ));
タスクの結果
JAXB バインディング・フレームワークを使用して、JAXB Java クラスをマーシャルし、XML データをアンマーシャルすることができるようになりました。
marshal および unmarshal ランタイム API についての追加情報は、JAXB Reference implementation のドキュメンテーションを参照してください。
トラブルの回避 (Avoid trouble): Java 2
セキュリティーが使用可能になっている場合、JAXBContext.newInstance()、Unmarshaller.unmarshal()、および Marshaller.marshal() のメソッド呼び出しを AccessController.doPrivileged メソッドにラップすることでセキュリティー例外を回避します。
gotcha
.