JAXB とは何ですか? なぜ JAXB を使用するのでしょうか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/607141

  •  03-07-2019
  •  | 
  •  

質問

JAXB はスライスされたパン以来の偉大なものだとここに誓っている男がいます。私は、Stack Overflow ユーザーがこのユースケースが JAXB にどのようなものであると考えているのか、また、それがそのケースに対して良い解決策となるのか、それとも悪い解決策となるのかを知りたいと思っています。

役に立ちましたか?

解決

私は 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 が役に立ちました。

他のヒント

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

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

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

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

こちらをご覧ください:

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

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

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

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

XStream Digester または XMLBeans 代替案。

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

たとえば、取引アプリケーションがあり、 Uber Lame Trade Reportingアプリに取引を報告する必要があります。そして、彼らは取得するために ultra.xsd を与えましたで。 $ JAVA_HOME / bin / xjc コンパイラを使用して、XMLをJavaクラスの束に変換します(例: UltraTrade )。

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

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

として表現されます

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>

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

JAXBとは

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top