20

XML を Java にバインドするために何を使用していますか? JAXB、Castor、および XMLBeans は、利用可能な選択肢の一部です。私が見た比較はすべて 3 ~ 4 年前のものです。私は他の提案を受け入れます。マーシャリング/アンマーシャリングのパフォーマンスと使いやすさが特に重要です。

明確化: あなたが使用しているフレームワークだけでなく、他のフレームワークよりも 1 つを使用する理由を知りたいです。

4

11 に答える 11

13

情報に基づいた決定を下したい場合は、XML オブジェクトと Java オブジェクトの間で変換する理由を明確にする必要があります。その理由は、この分野のさまざまなテクノロジーがさまざまな問題を解決しようとしているからです。さまざまなツールは、次の 2 つのカテゴリに分類されます。

  1. XML データ バインディング - XML ドキュメント内の情報をコンピュータ メモリ内のオブジェクトとして表すプロセスを指します。通常、これは XSD を定義し、同等の Java ソース コードを生成することを意味します。異なる言語間の相互運用性は最優先事項です (したがって、XSD を使用します)。最も一般的なのは、SOAP ベースの Web サービスの実装です。
  2. XML シリアライゼーション - メモリ内オブジェクトのグラフをストリームに書き出すことを指し、別の場所または別の場所で再構成できるようにします。Java クラスは手動で記述します。xml 表現は二次的に重要です。また、多くの場合、パフォーマンスの必要性は高く、.net などの他の言語との相互運用の必要性は低くなります。

xml シリアライゼーションでは、Xstream に勝るものはありません。JAXB は XML バインディングの標準です。

どちらの場合でも、J2EE を使用している場合は、JPA から取得したクラスに細心の注意を払う必要があります。これは、クラス プロキシと永続化固有のコレクション タイプがバインディング/シリアル化ツールを混乱させる可能性があるためです。

于 2008-10-15T20:08:59.570 に答える
8

ジブクス。以前はCastor XMLを使用していましたが、特にパフォーマンスに関しては、JiBX の方が大幅に優れていることがわかりました (一部のアプリケーション コードを Castor XML から JiBX に直接移植したことで、9 倍速くなりました)。また、JiBX のマッピング形式が Castor のものよりも洗練されていることもわかりました。

JiBX は、Castor で採用されているリフレクション アプローチではなく、コンパイル後のバイトコード操作を使用してパフォーマンスを達成します。これには、マップされたクラスを記述する方法に対する要求が少なくなるという利点があります。ツールを満たすためだけに、ゲッター、セッター、および引数なしのコンストラクターは必要ありません。ほとんどの場合、マッピングの問題を考慮せずにクラスを作成し、変更せずにマッピングできます。

于 2008-10-15T19:47:20.690 に答える
4

XML 用の XSD があり、データを既存の一連のクラスにバインドする必要がない場合、私はXMLBeansが本当に気に入っています。基本的には、次のように機能します。

  • XSD をコンパイルする
  • 生成された Java クラスを使用して、このスキーマに準拠するドキュメントを読み書きします

XML ドキュメントを生成されたクラスにバインドするのは、次のように簡単です。

EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile); 
于 2008-10-15T20:15:10.650 に答える
3

xstreamを使用します。マーシャリング/アンマーシャリングは簡単です。例については、チュートリアルを参照してください。

于 2008-10-15T18:10:36.953 に答える
2

私はさまざまな成功を収めてJaxbを使用してきました。当時(数年前)、全体的なドキュメントは光沢がなく、基本的な使用法のドキュメント(実装をダウンロードする場所を含む)を見つけるのは困難でした。

Javaクラスを作成したパーサーは、元のXSDとほとんど矛盾がなく、非常に優れていました(ただし、抽象XML要素のサポートに問題があったと思います)。

それ以来、私はそれを使用していませんが、私はまさにそのようなフレームワークを必要とする次のプロジェクトを持っており、他の誰かが上記をどのように公正にするかを知りたいと思います。

于 2008-10-15T18:45:03.797 に答える
2

この辺りで使われているのはJibxです。これは非常に高速ですが、バインドが少し難しい場合があります。ただし、ドメイン オブジェクトを記述した XML スキーマがある場合は特に便利です。これは、XSD に適切にマッピングされるためです (XSD を使用してスタブ ドメイン クラスとマッピングを作成できるベータ ツール XSD2Jibx もあります。既存のドメイン モデルに適合します)。

これはバイトコードを操作するため、Java .class ファイルの最初のコンパイル後に実行する必要があります。Maven プラグインを使用することも、直接使用することもできます (Eclipse プラグインは私にはうまくいかないようでした)。

于 2008-10-15T18:28:31.927 に答える
1

XmlBeans は、特に「壊れた」XSD/WSDL ファイルがある場合に適しています。

ドンが言及した

EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile);

..しかし、ノード、ファイル、またはほぼすべてのソースを使用することもできます。

名前空間と戦う必要はありません。アンマーシャリングするオブジェクトに移動し、それを Factory.parse します。

2週間前に見つけたかった。

于 2008-10-28T21:27:20.833 に答える
1

関連: Java での XML シリアライゼーション?

于 2008-10-15T23:39:45.120 に答える
1

私は 7 年前にキャスターを使用していましたが、かなりうまく機能しました。使用された DTD。その時点で多くの選択肢はありません。

現在のプロジェクトでは、
1) JAXB -- 標準ベース、参照実装が利用可能、コマンド ラインと ant ツールが利用可能です。最新バージョン - 2.1.8 には Java 5 以降が必要です。
2) XStream -- Soap アンマーシャリング用 -- Java 5+ が必要です。最新の JAXB ほど高速ではなく、標準に準拠していません。

BR、
~A

于 2008-10-15T19:40:22.373 に答える
0

キャスターを使用しています。それは私たちのニーズにかなり合っています。

于 2008-10-15T17:59:22.733 に答える
0

まったく同じ疑問を抱いていたところ、ついに IBM が作成したこのパフォーマンス テストを見つけました。http://www.ibm.com/developerworks/library/x-databdopt2/。JiBX が私の選択だと思います。

于 2009-02-25T00:37:01.503 に答える