JAXBはスライスパン以来最高のものだと誓っている男がいる。私は、Stack OverflowのユーザーがJAXBのユースケースだと思っているのを知りたいと思っています。JAXBとは何故、なぜそれを使用するのですか?
答えて
私は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はそれを操作するのに役立ちました。
JAXBはXSDなしでも実行できます。アノテーションを使用することができます。https://jaxb.dev.java.net/guide/Mapping_your_favorite_class.html – codefinger
JAXBは、JPAやJAXPなどの仕様で、複数の実装(Metro、EclipseLinkなど)があります。あなたが問題がある場合、別の実装に切り替えることができます。また、さまざまなベンダーが提供する拡張機能を利用することもできます。 –
@BlaiseDoughan、MetroはJAXB実装ですか?メトロはWSITの実装ではありませんか? –
"ORM for XML"です。ほとんどの場合、WS Death Starシステム用にJAX-WSとともに使用されます(実際にSunの実装も一緒に開発されます)。
JAXBを使用すると、オブジェクトのXML表現(マーシャリング)とXMLのオブジェクト表現(アンマーシャリング)を自動的に作成できます。
は限りXMLスキーマに関しては、次の2つの選択肢があります。
- をいくつかもありますJavaクラスから
をXSDを生成XSD
これらはバインディング・フレームワークではなく、シリアライゼーション・ライブラリです。良いバインディング・フレームワークは、任意のXMLを同形オブジェクト・グラフにマップしたり、戻ったりすることができます。これらのシンプルなシリアライゼーションメカニズムは、固定された非標準XMLスキーマを生成して使用します。 – erickson
エリクソンさん、ありがとうございました。私はJAXBとしか仕事をしていませんでした。私はあなたの入力に基づいて私の答えを編集します。 –
実際、XStreamは大丈夫ですが、どちらも非常に簡単なので、それほど単純ではありません。 Digesterはシンプルではなく、ただ単純です。 – StaxMan
パフォーマンスを低下させる理由は次のとおりです。マーシャリングとアンマーシャリングの際にはかなりのオーバーヘッドがあります。また、XML-オブジェクトを結合するための別のAPIを検討する必要があります - などJiBXのよう: http://jibx.sourceforge.net/
バインディングに問題がある場合はXSD2Jibxツールを使用することをお勧めします。これは「アルファ」ステータスですが、XSDスキーマでのクラスやバインディングの説明に役立ちます。デフォルトで、代わりにJavaユーティリティの日付を使用しています... – MetroidFan2002
Bullshit。 JAXBは、高速のパーサ(Woodstoxなど)を使用している限り、手作業のバインディングと比べて30〜40%のオーバーヘッドがあります。 JiBXは問題ありませんが、パフォーマンスの違いはあまりありません。 – StaxMan
私はいくつかのプロジェクトでJAXBを使用しており、引き続きJAXBを使用しています。しかし、それが他のフレームワークとどのように比較されるかを理解することは重要です。数百メガバイトの文書をマーシャリング/アンマーシャリングする場合、時間が重要です.JiBXは良い選択肢です。 JAXB ==反射、JiBX ==バイトコード計測。 – codefinger
あなたはXMLスキーマ(xsd
)として定義され、いくつかの外部のXML仕様にコーディングする必要がある場合JAXBは素晴らしいです。例えば
、あなたは取引アプリケーションを持っていて、ユーバーラメ展覧会のレポートのAppに取引を報告しなければならないし、彼らが乗ることをあなたにultra.xsd
を与えてくれました。 $JAVA_HOME/bin/xjc
コンパイラを使用して、XMLを一連のJavaクラス(例:UltraTrade
)に変換します。
次に、あなただけのUltraTrades
にあなたの貿易・オブジェクトを変換し、超社の間でデータをマーシャリングするJAXB
を使用するための簡単なアダプタ層を書くことができます。 よりも、あなたの取引をXML形式に変換するのが面倒すぎるほど簡単です。超社は、実際に自分の仕様に従った、とxsd:float
が実際にdouble
のように表現されなければならないとして、彼らがダウンしてい貿易price
していないときに、すべてが故障
です!
また、コードを先に実行することもできます。豆で始まり、必要に応じてスキーマを生成します。 – StaxMan
私は常時仕事でJAXBを使用しています。本当に大好きです。複雑なXMLスキーマが常に変化しており、XMLファイル内のタグのランダムアクセスに特に適しています。
私は気にしていませんが、私はブログを始めました。これは文字通り、私が最初に投稿したことです!
はここでそれをチェックアウト:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
あなたのブログの例をクリアしてください。それのためにupvoted。 :-) –
をあなたは、あまりにもJiBXのをチェックアウトすることができます。また、OTA(Open Travel Alliance)に特化した、AXIS2サーバーでサポートされている、非常に優れたxmlデータバインダーです。あなたはパフォーマンスと互換性を探しているなら、あなたはそれをチェックアウトすることができます
JAXBは、既定のマーシャリングの最適化を経て改善された性能を提供します。 JAXBは、JavaオブジェクトをXMLドキュメントとの間で読み書きするためのプログラマAPIを定義しているため、Javaを介したXMLの読み書きが簡単になります。
なぜ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はマーシャリングとアンマーシャリングのこの操作を実行するためのライブラリまたはツールです。それはこの頭痛からあなたを救います。それは簡単です。
- 1. ダイナミックプロキシクラスとは何ですか、なぜそれを使用するのですか?
- 2. AJAXに「#!/」を使用するサイトは何故ですか?
- 3. 何故地面にマウスで線を描くと、何も描画されないのはなぜですか?
- 4. C#のフィールドとは何ですか?なぜそれを使うのですか?
- 5. ダガーとは何ですか?そしてなぜそれを使うの?
- 6. ios sdkのプロモーションコードとは何ですか?なぜ我々はそれらを使用するのですか?
- 7. これは何故タイプですか?
- 8. コルドバテレメトリ、それは何で、なぜそれを使うのですか?
- 9. virtualenvとは何ですか、なぜそれを使うべきですか?
- 10. チェックポイントノードHDFSとは何ですか?なぜそれを使用するのですか?
- 11. 無限イテレータとは何ですか?なぜそれを使用するのですか?
- 12. シングルトンとは何ですか?それらを使用する方法??なぜそれらを使用するのですか?
- 13. コアオーディオエラー561015905とは何ですか?ロックボタンを使用すると、なぜそれが起こりますか?
- 14. 以下はなぜそれが何をするのですか?
- 15. Web APIとは何か、なぜそれを.netで使用するのですか?
- 16. Cocoaのデリゲートとは何ですか?なぜそれらを使用する必要がありますか?
- 17. パターンガードで使用すると、それはなぜ借りるのですか?
- 18. TDSプロトコルバージョン8.0とは何ですか、なぜそれを使用する必要がありますか?
- 19. AF_INETとは何ですか、なぜそれが必要なのですか?
- 20. 古典をサニックスでも使えますか?何故なの?
- 21. テレメトリ設定とは何ですか?私たちはなぜasp.netコアでそれを使用しますか?
- 22. PHPでIterablesとは何ですか?なぜ私たちはそれを使用しますか?
- 23. 仮想ディレクトリとは何ですか?それの使用は何ですか?
- 24. Liquibase Producerとは何ですか?それはなぜ使用されていますか?
- 25. Grunt、Gulp.js、Bowerの違いは何ですか?なぜ&それらを使用するのですか?
- 26. イベントソースとは何ですか?なぜそれはそう呼ばれるのですか?
- 27. ハイパーループの宝石とは何ですか?なぜそれを反応に使用しますか?
- 28. 故障モジュールこれは何を意味し、なぜこれが起こるのですか?
- 29. console.logはなぜ使用されていますか?それは何をするためのものか?
- 30. 「ストリング・バッシング」とは何ですか?それはなぜ悪いですか?
この記事を読む(XMLバインディングのためのJavaアーキテクチャ(JAXB))これは最良のものです。 URL:http://www.oracle.com/technetwork/articles/javase/index-140168.html#unmars –