web-dev-qa-db-ja.com

Jersey、JAXB、JAX-RS、Moxy、Jackson、EclipseLink Moxy、json、xmlの関係は何ですか?

私はNode.jsのバックグラウンドから来ており、RESTful Webサービスについて十分に理解しています。

現在、Javaを使用してRESTful Webサービスを構築しようとしています。コアJavaですが、JavaベースのWeb開発にまったく新しいものです。

チュートリアルの後で、Jerseyフレームワークを使用してRESTful APIを構築する必要があるという結論に達しました。 JerseyがJAX-RSのある種のリファレンス実装であることを理解しています。

しかし、JAXB、Jackson、EclipseLink Moxy、jersey-media-moxy、Jettison、JSON-P JSON、XMLなど、他のさまざまな用語とコンポーネント間の関係を理解できません私の読みに出くわす。私が結論付けることができる唯一のことは、JavaScriptのように単純ではなく、JavaオブジェクトをXMLまたはJSONの同等物に変換することではありませんでした。

私の質問は、上記のこれらの用語の関係と、JavaベースのRESTful APIを開発している場合にそれらがどのように適合するかです。

17
Harshal Patil

Javaの世界には多くの用語があり、それが新規開発者にとって大きな学習曲線を作成する可能性があります。Javaを使用してJSONまたはXMLドキュメントを渡すことは特に難しいことではありません。あなたがそれを行うために必要なさまざまな小片は長年にわたって専門用語を生み出してきました。私はあなたが以下で使用した用語の私の理解をリストアップしようとしました...

[〜#〜] xml [〜#〜] -XMLとは何か知っていますよね?拡張可能なマークアップ言語。これは、JSONが大物になる前に持っていたものです。

[〜#〜] json [〜#〜] -おお、まあ、JSONは新しい大きなものです。人間が読める形式のオブジェクトシリアライゼーションフォーマットであり、XMLより冗長ではありません。最近大人気。それは新しい魔法の弾丸であり、問​​題を解決するために役立ちます...

[〜#〜] jaxb [〜#〜] -Javaエコシステムの「XMLバインディングのJavaアーキテクチャ」は、XMLデータをオブジェクトに変換するための主要なメカニズムです。これは、対話することができ、その逆も同様です。APIであり、実装ではないことを理解することが重要です。そのため、ほとんどの場合、javax.xml.bindパッケージ内の注釈と単純なクラス/インターフェースのセットを定義します。 JAXBでは実装が必要です。Glassfishアプリケーションサーバーには参照実装が含まれています。ほとんどのアプリケーションサーバーには、JAXBのなんらかの実装があります。

Jackson -データバインディング用のライブラリ。ドキュメント形式としてXMLとJSONの両方をサポートし、JAXB APIを実装します。 JAXBの実装としてJacksonを使用することも、Jackson APIを直接使用することもできます。

EclipseLink Moxy -JAXB APIの代替実装。ジャクソンと同様に、独自のAPIも備えています。使用するかしないかを選択できます。おそらく、ジャクソンとモクシーの両方を使いたくないでしょう。

Jersey-media-moxy-ご指摘のとおり、JerseyはJAX-RSの実装です。 JAX-RSの1つの側面は、ドキュメントを渡すことです。多くの場合、XMLまたはJSONです。そのためには、ジャージーは、データバインディングまたはストリーム処理に使用する基礎となるライブラリを知る必要があります。したがって、jersey-media-moxyは、オブジェクトのシリアル化のニーズにMoxyを使用するようにJerseyを構成するために使用できる一種のジャージープラグイン依存関係として存在します。 jersey-media-json-jacksonと呼ばれる、Jacksonを使用するための同等のパッケージがあります。

Jettison -JavaオブジェクトをJsonに変換して戻すためのもう1つのシリアル化ライブラリ。

JSON-P -イベントのストリームとして、またはオブジェクトへのデータバインディングを介してJSONを処理するためのAPI。このAPIはまだ開発中です。誰かがそれなしでjson処理を行っているのはどのようなものかと尋ねるかもしれません。答えは、JacksonやMoxyなどの独自のライブラリAPIを使用するか、JSONで動作するようにJAXB APIを再利用するライブラリを使用することです(Jacksonは間違いなくこれを許可します) 、私はMoxyについてはわかりません)。 JSON-Pは、JAXBがもたらすすべてのXML概念なしで、JSON機能を直接操作することを容易にします。

39
sisyphus