web-dev-qa-db-ja.com

JAXBおよびJAXRSとは何ですか?それらはどのように関連していますか?

この率直な質問でごめんなさい。しかし、多くの人がこれらの2つの用語を毎日使用していますが、私にはわかりません。私はこれについていくつかの調査を行い、それが別々に何であるかを知っていました。しかし、それがどのように関連しているかを理解していません。最初に、これら2つについて理解したことを共有します。

JAXBは、スキーマとJavaオブジェクト間、およびXMLインスタンスドキュメントとJavaオブジェクトインスタンス間)の変換を可能にするXMLからJavaへのバインディングテクノロジーです。内部的に、JAXBはこのすべての変換を行いますxmlとJavaの間。これはxmlのパーサーであり、xmlのどのコンポーネントがJavaのコンポーネントに対応するかを認識し、壊れます。この回答の変換JAXBからは、xjc(またはcodgenプラグイン)などのツールによって実行されます。マッピングは次のようになります。

xsd:string Java.lang.String

xsd:integer Java.math.BigInteger

JaxRsは異なります。これは、リクエストを処理するための仕様のセットです。 「GET( "/ foo")」とは、URL/fooでget呼び出しを処理することを意味します。それはそれだけを述べています。それはどのように行われますか?はい、それはこの仕様の実装と呼ばれます。 restlet、resteasy、jersey、Apachecxfなどの実装がいくつかあります。これは、数学で実装するロジックと方法に類似しています。アルゴリズムのアイデアはバケット検索です。これは任意の方法で実装できます。 Java用語では、JaxRsはインターフェースであり、これらの4つのrestlet、resteasy、jersey、Apachecxfはインターフェースの実装です。

今、私の理解が正しいかどうか言ってください。次に、それらがどのように関連しているかを教えてください。助けてください 。可能であれば、絵による説明がより役立つでしょう。

18

あなたの理解は基本的に正しいです。 JAXBとJAX-RSはどちらもJava Community Process(JCP)標準であり、複数の実装があります。

[〜#〜] jaxb [〜#〜]-JavaドメインオブジェクトをXMLとの間で変換するための標準化されたメタデータとランタイムAPIを定義します。

JAX-RS-RESTfulサービスを作成するための標準化されたメタデータとランタイムAPIを定義します。デフォルトでは、application/xmlメディアタイプJAX-RSは、JAXBを使用してオブジェクトをXMLとの間で変換します。

次の例では、GET操作が実行されると、JAX-RS実装はCustomerを返します。 JAXB implを使用して、Customerのインスタンスをクライアントが実際に受信するXMLに変換します。

package org.example.service;

import javax.ejb.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import org.example.model.*;

@Stateless
@LocalBean
@Path("/customers")
public class CustomerResource {

    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("{id}")
    public Customer read(@PathParam("id") int id) {
        Customer customer = new Customer();
        customer.setId(id);
        customer.setFirstName("Jane");
        customer.setLastName(null);

        PhoneNumber pn = new PhoneNumber();
        pn.setType("work");
        pn.setValue("5551111");
        customer.getPhoneNumbers().add(pn);

        return customer;
     }

}
18
bdoughan