2013-07-31 5 views
13

이 무딘 질문에 사과드립니다. 그러나 많은 사람들이이 두 가지 용어를 매일 같이 사용합니다. 그러나 나는 잘 모릅니다. 나는 이것을 연구하고 그것이 무엇인지를 별도로 알고있었습니다. 그러나 이것이 어떻게 관련되어 있는지 이해하지 못합니다. 이 두 가지에 대해 처음으로 이해 한 것을 나눌 것입니다.JAXB 및 JAXRS 란 무엇입니까? 어떻게 관련이 있습니까?

JAXB는 변환 스키마와 자바 객체 사이의 XML 인스턴스 문서 와 자바 객체 인스턴스 간을 가능하게 XML - 투 - 자바 바인딩 기술입니다. 내부적으로 JAXB는 xml과 java 사이에서이 모든 변환을 수행합니다. 이것은 xml의 구문 분석기이며 xml의 구성 요소가 java의 내용과 일치하고 중단되는 부분을 알고 있습니다 ( ). JAXB에서이 대답을 변환하는 것은 xjc (또는 codgen plugin)와 같은 도구로 수행됩니다. 매핑

XSD처럼 될 수있다 : 정수 java.math.BigInteger의

JaxRs이 다른 :

XSD를 java.lang.String의 문자열입니다. 이것은 요청을 처리하기위한 사양 집합입니다. "GET ("/ foo ")"은 url/foo를 사용하여 호출을 처리한다는 의미입니다. 그것은 단지 그것을 진술한다. 어떻게 끝났어? 예, 을이 스펙의 구현이라고합니다. restlet, resteasy, jersey, apache cxf 등과 같은 구현의 수가 있습니다. 이것은 논리에 비유 할 수 있으며 수학에서 구현하는 방식입니다. 알고리즘 아이디어는 버킷 검색입니다.이 방법은 어떤 방식 으로든 구현 될 수 있습니다. 자바 용어로 JaxRs는 인터페이스이며이 4 개의 restlet, resteasy, 저지, apache cxf는 인터페이스 구현입니다.

지금 제 의견이 맞는지 말해주세요. 그렇다면 그들이 어떻게 관련되어 있는지 말해보십시오. 도와주세요 . 가능한 경우 그림이 더 도움이 될 것입니다.

답변

14

귀하의 이해는 기본적으로 정확합니다. 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; 
    } 

} 
+0

대단히 감사합니다. 하지만 2 가지 질문이 있습니다. 1) "응용 프로그램/xml 미디어 유형에 대해 기본적으로 JAX-RS는 JAXB를 사용합니다"라는 문구는 무엇을 의미합니까? 그런 다음 다른 미디어 유형에서는 어떻게됩니까? 2) 인용 한 예를 통해 무엇을 강조합니까? 명확히하십시오. –

+0

의견 1의 내 두 번째 질문이 삭제되었습니다. 그러나 위 예제에서 "JAXB impl은 Customer의 해당 인스턴스를 XML로 변환하는 데 사용됩니다."이 코드는 내부 코드입니까 아니면 예제 코드 조각에 있습니까? 예를 들어 줄 번호를 말할 수 있다면? –

+0

커스텀'MessageBodyReader' /'MessageBodyWriter'를 제공함으로써'application/xml'의 기본 처리를 무시할 수 있습니다. 다른 미디어 유형의 경우에는 종속되어 있습니다. 'application/json' 미디어 타입은 유명하지만 JAX-RS는 기본 바인딩이 무엇인지 정의하지 않습니다. 구현은 자체 default를 가지고 있습니다. 다음은 예입니다. http://blog.bdoughan.com/2013/07/oracle-weblogic-1212-now-with.html –