XML を Java にバインドするために何を使用していますか? JAXB、Castor、および XMLBeans は、利用可能な選択肢の一部です。私が見た比較はすべて 3 ~ 4 年前のものです。私は他の提案を受け入れます。マーシャリング/アンマーシャリングのパフォーマンスと使いやすさが特に重要です。
明確化: あなたが使用しているフレームワークだけでなく、他のフレームワークよりも 1 つを使用する理由を知りたいです。
情報に基づいた決定を下したい場合は、XML オブジェクトと Java オブジェクトの間で変換する理由を明確にする必要があります。その理由は、この分野のさまざまなテクノロジーがさまざまな問題を解決しようとしているからです。さまざまなツールは、次の 2 つのカテゴリに分類されます。
xml シリアライゼーションでは、Xstream に勝るものはありません。JAXB は XML バインディングの標準です。
どちらの場合でも、J2EE を使用している場合は、JPA から取得したクラスに細心の注意を払う必要があります。これは、クラス プロキシと永続化固有のコレクション タイプがバインディング/シリアル化ツールを混乱させる可能性があるためです。
ジブクス。以前はCastor XMLを使用していましたが、特にパフォーマンスに関しては、JiBX の方が大幅に優れていることがわかりました (一部のアプリケーション コードを Castor XML から JiBX に直接移植したことで、9 倍速くなりました)。また、JiBX のマッピング形式が Castor のものよりも洗練されていることもわかりました。
JiBX は、Castor で採用されているリフレクション アプローチではなく、コンパイル後のバイトコード操作を使用してパフォーマンスを達成します。これには、マップされたクラスを記述する方法に対する要求が少なくなるという利点があります。ツールを満たすためだけに、ゲッター、セッター、および引数なしのコンストラクターは必要ありません。ほとんどの場合、マッピングの問題を考慮せずにクラスを作成し、変更せずにマッピングできます。
XML 用の XSD があり、データを既存の一連のクラスにバインドする必要がない場合、私はXMLBeansが本当に気に入っています。基本的には、次のように機能します。
XML ドキュメントを生成されたクラスにバインドするのは、次のように簡単です。
EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile);
xstreamを使用します。マーシャリング/アンマーシャリングは簡単です。例については、チュートリアルを参照してください。
私はさまざまな成功を収めてJaxbを使用してきました。当時(数年前)、全体的なドキュメントは光沢がなく、基本的な使用法のドキュメント(実装をダウンロードする場所を含む)を見つけるのは困難でした。
Javaクラスを作成したパーサーは、元のXSDとほとんど矛盾がなく、非常に優れていました(ただし、抽象XML要素のサポートに問題があったと思います)。
それ以来、私はそれを使用していませんが、私はまさにそのようなフレームワークを必要とする次のプロジェクトを持っており、他の誰かが上記をどのように公正にするかを知りたいと思います。
この辺りで使われているのはJibxです。これは非常に高速ですが、バインドが少し難しい場合があります。ただし、ドメイン オブジェクトを記述した XML スキーマがある場合は特に便利です。これは、XSD に適切にマッピングされるためです (XSD を使用してスタブ ドメイン クラスとマッピングを作成できるベータ ツール XSD2Jibx もあります。既存のドメイン モデルに適合します)。
これはバイトコードを操作するため、Java .class ファイルの最初のコンパイル後に実行する必要があります。Maven プラグインを使用することも、直接使用することもできます (Eclipse プラグインは私にはうまくいかないようでした)。
XmlBeans は、特に「壊れた」XSD/WSDL ファイルがある場合に適しています。
ドンが言及した
EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile);
..しかし、ノード、ファイル、またはほぼすべてのソースを使用することもできます。
名前空間と戦う必要はありません。アンマーシャリングするオブジェクトに移動し、それを Factory.parse します。
2週間前に見つけたかった。
私は 7 年前にキャスターを使用していましたが、かなりうまく機能しました。使用された DTD。その時点で多くの選択肢はありません。
現在のプロジェクトでは、
1) JAXB -- 標準ベース、参照実装が利用可能、コマンド ラインと ant ツールが利用可能です。最新バージョン - 2.1.8 には Java 5 以降が必要です。
2) XStream -- Soap アンマーシャリング用 -- Java 5+ が必要です。最新の JAXB ほど高速ではなく、標準に準拠していません。
BR、
~A
キャスターを使用しています。それは私たちのニーズにかなり合っています。
まったく同じ疑問を抱いていたところ、ついに IBM が作成したこのパフォーマンス テストを見つけました。http://www.ibm.com/developerworks/library/x-databdopt2/。JiBX が私の選択だと思います。