2009-03-03 3 views
91

JAXBはスライスパン以来最高のものだと誓っている男がいる。私は、Stack OverflowのユーザーがJAXBのユースケースだと思っているのを知りたいと思っています。JAXBとは何故、なぜそれを使用するのですか?

+2

この記事を読む(XMLバインディングのためのJavaアーキテクチャ(JAXB))これは最良のものです。 URL:http://www.oracle.com/technetwork/articles/javase/index-140168.html#unmars –

答えて

85

私はXMLを操作するJAXBの大きなファンです。基本的には、この問題の解決方法を提供します(XML、Javaデータ構造、XMLスキーマに精通していることを前提としています)。

XMLの操作は難しいです。基本的にはテキストファイルであるXMLファイルを取得して、ある種のデータ構造に変換する必要があります。このデータ構造を使ってプログラムを操作できます。

JAXBは、スキーマに対応する一連のクラスを作成して作成するXMLスキーマを採用します。 JAXBユーティリティは、そのXMLを操作するためのデータ構造の階層を作成します。

JAXBを使用してXMLファイルを読み込んだ後、生成されたクラスのインスタンスを作成することができます。 JAXBは逆も行います:Javaクラスを受け取り、対応するXMLを生成します。

私はJAXBが使いやすく、Java 1.6が付属しています(1.5を使用している場合はJAXB .jarsをダウンロードできます)。クラス階層を作成する方法は直感的です。私は "データ"に焦点を当てることができるように "XML"を抽象化するまともな仕事をしています。

質問に答えるには:私は、小さなXMLファイルの場合、JAXBが過度に使用される可能性があります。 XMLスキーマの作成と保守、およびデータ構造にJavaクラスを利用する「標準的な教科書メソッド」を使用する必要があります。 (メインクラス、「ノード」を表す小さな内部クラス、およびそれらの巨大な階層)。したがって、JAXBはアプリケーションの「プリファレンス」の単純な線形リストではそれほど優れていないでしょう。

しかし、複雑なXMLスキーマを持ち、多くのデータが含まれていると、JAXBは素晴らしいです。私のプロジェクトでは、大量のデータをバイナリ(Cプログラムで消費されたもの)とXML(人間がそのデータを消費して変更できるように)に変換していました。結果として得られるXMLスキーマは重要ではありませんでした(多くの階層レベル、いくつかのフィールドが繰り返されたり、他のフィールドは返されなかった)ので、JAXBはそれを操作するのに役立ちました。

+19

JAXBはXSDなしでも実行できます。アノテーションを使用することができます。https://jaxb.dev.java.net/guide/Mapping_your_favorite_class.html – codefinger

+6

JAXBは、JPAやJAXPなどの仕様で、複数の実装(Metro、EclipseLinkなど)があります。あなたが問題がある場合、別の実装に切り替えることができます。また、さまざまなベンダーが提供する拡張機能を利用することもできます。 –

+0

@BlaiseDoughan、MetroはJAXB実装ですか?メトロはWSITの実装ではありませんか? –

17

"ORM for XML"です。ほとんどの場合、WS Death Starシステム用にJAX-WSとともに使用されます(実際にSunの実装も一緒に開発されます)。

7

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

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

  • をいくつかもありますJavaクラスから

をXSDを生成XSD

  • からJavaクラスを生成しますXStream,DigesterまたはXMLBeansのような単純なXMLシリアル化ライブラリがあります。

  • +1

    これらはバインディング・フレームワークではなく、シリアライゼーション・ライブラリです。良いバインディング・フレームワークは、任意のXMLを同形オブジェクト・グラフにマップしたり、戻ったりすることができます。これらのシンプルなシリアライゼーションメカニズムは、固定された非標準XMLスキーマを生成して使用します。 – erickson

    +0

    エリクソンさん、ありがとうございました。私はJAXBとしか仕事をしていませんでした。私はあなたの入力に基づいて私の答えを編集します。 –

    +0

    実際、XStreamは大丈夫ですが、どちらも非常に簡単なので、それほど単純ではありません。 Digesterはシンプルではなく、ただ単純です。 – StaxMan

    22

    パフォーマンスを低下させる理由は次のとおりです。マーシャリングとアンマーシャリングの際にはかなりのオーバーヘッドがあります。また、XML-オブジェクトを結合するための別のAPIを検討する必要があります - などJiBXのよう: http://jibx.sourceforge.net/

    +1

    バインディングに問題がある場合はXSD2Jibxツールを使用することをお勧めします。これは「アルファ」ステータスですが、XSDスキーマでのクラスやバインディングの説明に役立ちます。デフォルトで、代わりにJavaユーティリティの日付を使用しています... – MetroidFan2002

    +3

    Bullshit。 JAXBは、高速のパーサ(Woodstoxなど)を使用している限り、手作業のバインディングと比べて30〜40%のオーバーヘッドがあります。 JiBXは問題ありませんが、パフォーマンスの違いはあまりありません。 – StaxMan

    +6

    私はいくつかのプロジェクトでJAXBを使用しており、引き続きJAXBを使用しています。しかし、それが他のフレームワークとどのように比較されるかを理解することは重要です。数百メガバイトの文書をマーシャリング/アンマーシャリングする場合、時間が重要です.JiBXは良い選択肢です。 JAXB ==反射、JiBX ==バイトコード計測。 – codefinger

    7

    あなたはXMLスキーマ(xsd)として定義され、いくつかの外部のXML仕様にコーディングする必要がある場合JAXBは素晴らしいです。例えば

    、あなたは取引アプリケーションを持っていて、ユーバーラメ展覧会のレポートのAppに取引を報告しなければならないし、彼らが乗ることをあなたにultra.xsdを与えてくれました。 $JAVA_HOME/bin/xjcコンパイラを使用して、XMLを一連のJavaクラス(例:UltraTrade)に変換します。

    次に、あなただけのUltraTradesにあなたの貿易・オブジェクトを変換し、超社の間でデータをマーシャリングするJAXBを使用するための簡単なアダプタ層を書くことができます。 よりも、あなたの取引をXML形式に変換するのが面倒すぎるほど簡単です。超社は、実際に自分の仕様に従った、とxsd:floatが実際にdoubleのように表現されなければならないとして、彼らがダウンしてい貿易priceしていないときに、すべてが故障

    です!

    +1

    また、コードを先に実行することもできます。豆で始まり、必要に応じてスキーマを生成します。 – StaxMan

    17

    私は常時仕事でJAXBを使用しています。本当に大好きです。複雑なXMLスキーマが常に変化しており、XMLファイル内のタグのランダムアクセスに特に適しています。

    私は気にしていませんが、私はブログを始めました。これは文字通り、私が最初に投稿したことです!

    はここでそれをチェックアウト:

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

    +4

    あなたのブログの例をクリアしてください。それのためにupvoted。 :-) –

    3

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

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

    0

    JAXBは、既定のマーシャリングの最適化を経て改善された性能を提供します。 JAXBは、JavaオブジェクトをXMLドキュメントとの間で読み書きするためのプログラマAPIを定義しているため、Javaを介したXMLの読み書きが簡単になります。

    4

    なぜJAXBが必要ですか? Webサービスのリモートコンポーネント(Javaで書かれている)は、相互にメッセージを交換する手段としてXMLを使用します。 なぜXMLですか? XMLは限られたリソースを持つネットワーク上でメッセージを交換するための軽量オプションと考えられているからです。 これらのXML文書をオブジェクトに変換する必要があります。逆もまた同様です。例:シンプルなJava POJO Employeeを使用して、Employeeデータをリモートコンポーネント(Javaプログラム)に送信できます。

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

    このPOJOは、以下のようにXML文書に(マーシャル)に変換されなければならない:

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

    とリモートコンポーネントに、バックJavaオブジェクトにXML文書(アンマーシャル)から。

    JAXBとは?

    JAXBはマーシャリングとアンマーシャリングのこの操作を実行するためのライブラリまたはツールです。それはこの頭痛からあなたを救います。それは簡単です。

    関連する問題