JiBXの概要
1. 概要
JiBXは、XMLデータをJavaオブジェクトにバインドするためのツールです。 JAXBなどの他の一般的なツールと比較して、安定したパフォーマンスを提供します。
JiBXは他のJava-XMLツールと比較して非常に柔軟性が高く、バインディング定義を使用してJava構造をXML表現から分離し、それぞれを独立して変更できるようにします。
この記事では、XMLをJavaオブジェクトにバインドするJiBXが提供するさまざまな方法について説明します。
2. JiBXのコンポーネント
2.1. バインディング定義ドキュメント
バインディング定義ドキュメントは、JavaオブジェクトをXMLに変換する方法とXMLから変換する方法を指定します。
JiBXバインディングコンパイラは、実際のクラスファイルとともに、1つ以上のバインディング定義を入力として受け取ります。 クラスファイルに追加することにより、バインディング定義をJavaバイトコードにコンパイルします。 クラスファイルがこのコンパイル済みバインディング定義コードで強化されると、JiBXランタイムで動作する準備が整います。
2.2. 道具
使用する3つの主要なツールがあります。
-
BindGen –Javaコードからバインディングおよびマッチングスキーマ定義を生成します
-
CodeGen –XMLスキーマからJavaコードとバインディング定義を作成します
-
JiBX2Wsdl –既存のJavaコードからのスキーマ定義とともにバインディング定義と一致するWSDLを作成します
3. Mavenの構成
3.2. プラグイン
コード生成やバインディング生成など、JiBXでさまざまな手順を実行するには、pom.xmlでmaven-jibx-pluginを構成する必要があります。
Javaコードから始めて、バインディングとスキーマ定義を生成する必要がある場合は、プラグインを構成しましょう。
org.jibx
maven-jibx-plugin
...
src/main/resources
*-binding.xml
template-binding.xml
true
process-classes
bind
スキーマがあり、Javaコードとバインディング定義を生成すると、maven-jibx-pluginは、スキーマファイルのパスとソースコードディレクトリへのパスに関する情報で構成されます。
org.jibx
maven-jibx-plugin
...
generate-java-code-from-schema
schema-codegen
src/main/jibx
customer-schema.xsd
true
compile-binding
bind
target/generated-sources
true
true
true
4. バインディングの定義
バインディング定義は、JiBXの中核部分です。 基本的なバインディングファイルは、XMLとJavaオブジェクトフィールド間のマッピングを指定します。
...
4.1. 構造マッピング
構造マッピングにより、XML構造はオブジェクト構造に似たものになります。
...
...
...
この構造に対応するクラスは次のとおりです。
public class Customer {
private Person person;
...
// standard getters and setters
}
public class Person {
private String lastName;
...
// standard getters and setters
}
4.2. CollectionおよびArrayマッピング
JiBXバインディングは、オブジェクトのコレクションを操作する簡単な方法を提供します。
...
...
対応するマッピングJavaオブジェクトを見てみましょう。
public class Order {
List addressList = new ArrayList<>();
...
// getters and setters here
}
public static class Address {
private String name;
...
// standard getters and setter
}
4.3. 高度なマッピング
これまで、基本的なマッピング定義を見てきました。 JiBXマッピングは、抽象マッピングやマッピング継承など、さまざまな種類のマッピングを提供します。
抽象マッピングを定義する方法を見てみましょう。
...
これがJavaオブジェクトにどのようにバインドされるかを見てみましょう。
public class Customer {
private Person person;
...
private Phone homePhone;
private Phone officePhone;
// standard getters and setters
}
ここでは、Customerクラスに複数のPhoneフィールドを指定しています。 Phone自体もPOJOです。
public class Phone {
private String number;
// standard getters and setters
}
通常のマッピングに加えて、拡張機能も定義できます。 各拡張マッピングは、いくつかの基本マッピングを参照します。 マーシャリング時に、実際のオブジェクトタイプによって、どのXMLマッピングが適用されるかが決まります。
拡張機能がどのように機能するかを見てみましょう。
...
...
...
対応するJavaオブジェクトを見てみましょう。
public class Identity {
private long customerId;
// standard getters and setters
}
5. 結論
この簡単な記事では、JiBXを使用してXMLからJavaオブジェクトへ/からXMLを変換するさまざまな方法を検討しました。 また、バインディング定義を使用してさまざまな表現を処理する方法も確認しました。
この記事の完全なコードはover on GitHubで入手できます。