java - 入れ子 - jaxbとは




JAXBとは何ですか?なぜJAXBを使用しますか? (6)

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

JAXBはスライスされたパン以来最高のものだと誓っている男がいる。 私は、Stack OverflowのユーザーがJAXBのユースケースだと思っているのを知りたいと思っています。


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

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

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

XStreamDigesterXMLBeansなどのXMLシリアライズライブラリもあります。


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

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

このPojoは、次のようにXML文書に変換する必要があります(Marshall):

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

リモートコンポーネントでは、XML文書(Un-Marshall)からJavaオブジェクトに戻ります。

JAXBとは何ですか?

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


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

たとえば、トレーディングアプリケーションがあり、取引をUber Lame Trade Reporting Appに報告する必要があります。彼らはultra.xsdていることを示しています。 $JAVA_HOME/bin/xjcコンパイラを使用して、XMLをUltraTrade Javaクラス( UltraTrade )にUltraTradeます。

次に、単純なアダプタ層を作成して取引オブジェクトをUltraTradesに変換し、 JAXBを使用してデータをUltra-Corpにマーシャリングします。 あなたのトレードをXML形式に変換することを邪魔するよりもずっと簡単です。

それがすべて破綻したのは、Ultra-Corpが実際に自分の仕様に従わなかったときで、 xsd:floatとして落とした取引priceは実際にはxsd:floatとして表現されるべきです!


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


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

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

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

その後、JAXBを使用してXMLファイルを読み取り、生成されたクラスのインスタンスを作成します。これは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