web-dev-qa-db-ja.com

JAXBとは何ですか。なぜ使用するのですか?

ここには、JAXBがスライスされたパン以来の最大のものであると誓う男がいます。 Stack OverflowユーザーがJAXBのユースケースをどのように考えているのか、そしてそのケースにとって何が良いまたは悪いソリューションであるのかを知りたいです。

103
Jay R.

私はXMLを操作するためのJAXBの大ファンです。基本的に、この問題の解決策を提供します(XML、Javaデータ構造、およびXMLスキーマに精通していると仮定しています):

XMLでの作業は困難です。基本的にはテキストファイルであるXMLファイルを取得し、それを何らかのプログラムで操作できるデータ構造に変換する方法が必要です。

JAXBは、ユーザーが作成したXMLスキーマを取得し、そのスキーマに対応するクラスのセットを作成します。 JAXBユーティリティは、そのXMLを操作するためのデータ構造の階層を作成します。

次に、JAXBを使用してXMLファイルを読み取り、生成されたクラスのインスタンスを作成します-XMLからのデータをロードします。 JAXBは逆も行います。Javaクラスを取り、対応するXMLを生成します。

JAXBは使いやすく、Java 1.6(1.5を使用している場合はJAXB .jarをダウンロードできます。)が付属しているため)JAXBが好きです。私の経験では、「データ」に集中できるように、「XML」を抽象化するまともな仕事をしています。

したがって、あなたの質問に答えるには、小さなXMLファイルの場合、JAXBが過剰になる可能性があります。 XMLスキーマを作成および保守し、データ構造にJavaクラスを使用する「標準テキストブックメソッド」を使用する必要があります。(メインクラス、「ノード」を表す小さな内部クラス、そのため、JAXBは、アプリケーションの「プリファレンス」の単純な線形リストにはあまり適していません。

しかし、かなり複雑なXMLスキーマがあり、その中に大量のデータが含まれている場合、JAXBは素晴らしいです。私のプロジェクトでは、バイナリ(Cプログラムによって消費される)とXML(人間がそのデータを消費および変更できるようにする)の間で大量のデータを変換していました。結果のXMLスキーマは自明ではありませんでした(階層の​​多くのレベル、一部のフィールドは繰り返すことができましたが、他のフィールドは繰り返すことができませんでした)。

96
poundifdef

これを使用しない理由は次のとおりです。パフォーマンスが低下します。マーシャリングとアンマーシャリングの際には、かなりのオーバーヘッドがあります。 JiBXなど、XMLオブジェクトバインディング用の別のAPIを検討することもできます。 http://jibx.sourceforge.net/

24
codefinger

私はいつも仕事でJAXBを使用していますが、本当に気に入っています。常に変化する複雑なXMLスキーマに最適で、特にXMLファイル内のタグのランダムアクセスに適しています。

私はポン引きするのは嫌いですが、ブログを始めたばかりで、これは文字通り私が投稿した最初のものです!

こちらをご覧ください:

http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/

20
artgon

「ORM for XML」です。 WS Death Starシステム用にJAX-WSと一緒に最もよく使用されます(実際、Sunの実装は一緒に開発されます)。

20

JAXBを使用すると、オブジェクトのXML表現(マーシャリング)とXMLのオブジェクト表現(アンマーシャリング)を自動的に作成できます。

XMLスキーマに関する限り、2つの選択肢があります。

  • XSDからJavaクラスを生成
  • JavaクラスからXSDを生成します

XStreamDigester 、または XMLBeans のような、より単純なXMLシリアル化ライブラリもあります。

9
Fabian Steeg

JAXBは、XMLスキーマ(xsd)として定義された外部XML仕様にコーディングする必要がある場合に最適です。

たとえば、取引アプリケーションがあり、取引をUber Lame Trade Reporting Appに報告する必要があり、_ultra.xsd_が与えられていますうまくやっていくために。 _$Java_HOME/bin/xjc_コンパイラを使用して、XMLをJavaクラス(たとえば、UltraTrade)]の束に変換します。

次に、単純なadapterレイヤーを記述して、取引オブジェクトをUltraTradesに変換し、JAXBを使用してデータをマーシャリングできます。ウルトラコープに向かいます。 Much取引をXML形式に変換することを台無しにするよりも簡単です。

すべてが壊れるのは、Ultra-Corpが実際に独自の仕様に従っていない場合であり、_xsd:float_としてダウンしている取引priceは、実際にはdoubleとして表現されるべきです!

8
oxbow_lakes

なぜJAXBが必要なのか? Webサービスのリモートコンポーネント(Javaで記述)は、XMLを使用して相互にメッセージを交換します。 なぜXML? XMLは、リソースが限られているネットワークでメッセージを交換するための軽量オプションと見なされているためです。そのため、これらのXMLドキュメントをオブジェクトに、またはその逆に変換する必要が頻繁にあります。例:Simple Java POJO Employeeは、従業員データをリモートコンポーネントに送信するために使用できます(Javaプログラム)。

class Employee{
 String name;
 String dept;
 ....
}

このPojoは、次のようにXMLドキュメントに変換(マーシャル)する必要があります。

<Employee>
  <Name>...</Name>
  <Department>...</Department>
</Employee>

リモートコンポーネントで、Java XMLドキュメントのオブジェクト(Un-Marshall)に戻ります。

JAXBとは?

JAXBは、マーシャリングとアンマーシャリングのこの操作を実行するためのライブラリまたはツールです。この頭痛からあなたを解放します。

6
Prashant_M

JIBXもチェックアウトできます。また、非常に優れたxmlデータバインダーでもあり、OTA(Open Travel Alliance)にも特化しており、AXIS2サーバーでサポートされています。パフォーマンスと互換性を探しているなら、あなたはそれをチェックアウトすることができます:

http://jibx.sourceforge.net/index.html

4
LostMohican

JAXBは、デフォルトのマーシャリング最適化によりパフォーマンスを改善します。 JAXBは、XMLドキュメントとの間でJavaオブジェクトを読み書きするためのプログラマAPIを定義するため、Javaを介したXMLの読み書きを簡素化します。

0
user2989087