回答:
私はXMLを操作するためのJAXBの大ファンです。基本的に、これはこの問題の解決策を提供します(私はXML、Javaデータ構造、およびXMLスキーマに精通していることを前提としています)。
XMLでの作業は困難です。XMLファイル(基本的にはテキストファイル)を取得して、プログラムで操作できる何らかのデータ構造に変換する方法が必要です。
JAXBはXMLスキーマを取得して、そのスキーマに対応する一連のクラスを作成します。JAXBユーティリティは、そのXMLを操作するためのデータ構造の階層を作成します。
次に、JAXBを使用してXMLファイルを読み取り、生成されたクラスのインスタンスを作成できます-XMLからのデータが含まれています。JAXBは逆も行います。Javaクラスを受け取り、対応するXMLを生成します。
JAXBは使いやすく、Java 1.6が付属しているため、私はJAXBが好きです(1.5を使用している場合は、JAXB .jarをダウンロードできます)。クラス階層を作成する方法は直感的で、私の経験では、きちんとした仕事をしています「XML」を抽象化して、「データ」に集中できるようにします。
だからあなたの質問に答える:小さなXMLファイルの場合、JAXBはやり過ぎかもしれないと思います。XMLスキーマを作成して維持し、データ構造にJavaクラスを利用する「標準の教科書メソッド」を使用する必要があります。(メインクラス、「ノード」を表す小さな内部クラス、およびそれらの巨大な階層。)したがって、JAXBは、アプリケーションの「設定」の単純な線形リストにはおそらくそれほど優れていません。
しかし、かなり複雑なXMLスキーマがあり、その中に大量のデータが含まれている場合、JAXBは素晴らしいです。私のプロジェクトでは、大量のデータをバイナリ(Cプログラムで使用)とXML(人間がそのデータを使用および変更できるようにする)の間で変換していました。結果のXMLスキーマは重要なものでした(階層の多くのレベル、一部のフィールドは繰り返すことができ、他のフィールドはできません)。そのため、JAXBはそれを操作するのに役立ちました。
これを使用しない理由は次のとおりです。パフォーマンスが低下します。マーシャリングとマーシャリング解除の際にはかなりのオーバーヘッドがあります。あなたはまた、XML-オブジェクトを結合するための別のAPIを検討する必要があります-などJiBXのよう: http://jibx.sourceforge.net/
「ORM for XML」です。WS Death Starシステムでは、JAX-WSと一緒に使用されることが最も多く(実際、Sunの実装は一緒に開発されています)。
私はいつもJAXBを仕事で使用しており、本当に気に入っています。常に変化する複雑なXMLスキーマに最適であり、XMLファイル内のタグのランダムアクセスに特に適しています。
私はヒモが嫌いですが、私はブログを始めたばかりで、これは文字通り最初に投稿したものです!
ここでそれをチェックしてください:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
JAXBを使用すると、オブジェクトのXML表現(マーシャリング)とXMLのオブジェクト表現(アンマーシャリング)を自動的に作成できます。
XMLスキーマに関する限り、2つの選択肢があります。
XStream、Digester、XMLBeansなど、よりシンプルなXMLシリアライゼーションライブラリもいくつかあります。
JAXBは、XMLスキーマとして定義された外部XML仕様(xsd
)にコーディングする必要がある場合に最適です。
たとえば、取引アプリケーションを持っている、あなたはに取引を報告しなければならないユーバーラメ展覧会のレポートアプリケーションと、彼らはあなたを与えてくれたultra.xsd
と乗ることを。$JAVA_HOME/bin/xjc
コンパイラーを使用して、XMLを一連のJavaクラス(例:)に変換しますUltraTrade
。
次に、単純なアダプターレイヤーを作成して、取引オブジェクトをに変換し、UltraTrades
それを使用しJAXB
てデータをUltra-Corpにマーシャリングします。取引をXML形式に変換することよりもはるかに簡単です。
それがすべて失敗するのは、Ultra-Corpが実際に独自の仕様に従わなかったときであり、price
彼らがダウンしている取引xsd:float
は実際にはdouble
!
なぜJAXBが必要なのですか? Webサービスのリモートコンポーネント(Javaで記述)は、XMLを使用して相互にメッセージを交換します。なぜXMLなのか?なぜなら、XMLはリソースが限られたネットワーク上でメッセージを交換するための軽量オプションと見なされているからです。そのため、多くの場合、これらのXMLドキュメントをオブジェクトに、またはその逆に変換する必要があります。例:単純なJava POJO従業員を使用して、従業員データをリモートコンポーネント(Javaプログラム)に送信できます。
class Employee{
String name;
String dept;
....
}
このPojoは、次のようにXMLドキュメントに変換(マーシャル)する必要があります。
<Employee>
<Name>...</Name>
<Department>...</Department>
</Employee>
そして、リモートコンポーネントで、XMLドキュメントからJavaオブジェクトに戻ります(Un-Marshall)。
JAXBとは
JAXBは、マーシャリングおよびアンマーシャリングのこの操作を実行するためのライブラリまたはツールです。それだけで、この頭痛の種からあなたを救います。
JIBXも確認できます。また、非常に優れたXMLデータバインダーでもあり、OTA(Open Travel Alliance)にも特化しており、AXIS2サーバーでサポートされています。あなたがパフォーマンスと互換性を探しているなら、あなたはそれをチェックすることができます:
JAXBは、デフォルトのマーシャリング最適化によりパフォーマンスを向上させます。JAXBは、XMLドキュメントとの間でJavaオブジェクトを読み書きするためのプログラマAPIを定義し、Javaを介したXMLの読み書きを簡素化します。