2009-03-03 2 views
91

JAXB는 슬라이스 빵 이후로 가장 위대한 존재라고 맹세 한 녀석이 있습니다. Stack Overflow 사용자가 JAXB를위한 유스 케이스라고 생각하고 무엇이 좋은지 또는 나쁜 해결책인지 궁금하다.JAXB 란 무엇이며 왜 JAXB를 사용해야합니까?

+2

이 기사 (Java Architecture for XML Binding (JAXB))를 읽는 것이 가장 좋습니다. URL : http://www.oracle.com/technetwork/articles/javase/index-140168.html#unmars –

답변

85

저는 XML 조작을위한 JAXB의 열렬한 팬입니다. 기본적으로이 문제에 대한 해결책을 제공합니다. XML, Java 데이터 구조 및 XML 스키마에 익숙하다고 가정합니다.

XML 작업은 어렵습니다. 기본적으로 텍스트 파일 인 XML 파일을 가져 와서 일종의 데이터 구조로 변환하여 프로그램에서 조작 할 수있는 방법이 필요합니다.

JAXB는 해당 스키마에 해당하는 클래스 집합을 작성하고 작성하는 XML 스키마를 사용합니다. JAXB 유틸리티는 해당 XML을 조작하기위한 데이터 구조의 계층 구조를 작성합니다.

JAXB를 사용하여 XML 파일을 읽은 다음 XML의 데이터가있는 생성 된 클래스의 인스턴스를 만들 수 있습니다. JAXB는 또한 역순을 수행합니다. Java 클래스를 가져와 해당 XML을 생성합니다.

JAXB는 사용하기 쉽기 때문에 JAXB를 좋아하고 Java 1.6이 제공됩니다 (1.5를 사용하는 경우 JAXB .jars를 다운로드 할 수 있습니다). 클래스 계층을 만드는 방법은 직관적이며, 나는 "데이터"에 집중할 수 있도록 "XML"을 추상화하는 괜찮은 일을한다.

귀하의 질문에 대한 답변 : 저는 작은 XML 파일의 경우 JAXB가 과도 할 수도 있습니다. XML 스키마를 만들고 유지 관리하고 데이터 구조에 Java 클래스를 활용하는 "표준 교과서 방법"을 사용해야합니다. (메인 클래스, "노드"를 나타내는 작은 내부 클래스, 그리고 그것들의 거대한 계층 구조). 따라서 JAXB는 애플리케이션의 "환경 설정"에 대한 간단한 선형 목록에 그다지 좋지 않을 것입니다.

그러나 복잡한 XML 스키마가 있고 많은 데이터가 포함되어 있으면 JAXB가 환상적입니다. 내 프로젝트에서는 바이너리 (C 프로그램에서 소비 된)와 XML (인간이 데이터를 소비하고 수정할 수 있도록) 사이에서 많은 양의 데이터를 변환하고있었습니다. 결과 XML 스키마는 중요하지 않았으며 (많은 수준의 계층 구조, 일부 필드는 반복 될 수 있었고, 다른 필드는 반복 될 수 없었습니다) JAXB는이를 조작 할 수있게 도움이되었습니다.

+19

JAXB는 XSD없이 수행 할 수 있습니다. 주석을 사용할 수 있습니다. https://jaxb.dev.java.net/guide/Mapping_your_favorite_class.html – codefinger

+6

JAXB는 JPA 또는 JAXP와 같은 스펙으로, 구현 (Metro, EclipseLink 등)이 여러 개 있음을 의미합니다. 하나의 문제에 문제가 있으면 다른 구현으로 전환 할 수 있습니다. 다른 공급 업체가 제공하는 확장 기능을 활용할 수도 있습니다. –

+0

@BlaiseDoughan, Metro는 JAXB 구현입니다! Metro가 WSIT 구현이 아닌가? –

17

"XML 용 ORM"입니다. WS Death Star 시스템을 위해 JAX-WS와 함께 자주 사용됩니다 (실제로 Sun 구현은 함께 개발됩니다).

7

JAXB를 사용하면 객체의 XML 표현 (마샬링) 및 XML의 객체 표현 (언 마샬링)을 자동으로 생성 할 수 있습니다.

지금까지 XML 스키마에 관한 한, 당신은 두 가지 선택이 있습니다도있다 자바 클래스

에서

  • 는 XSD를 생성 XSD에서

    • 생성 Java 클래스를 일부 XStream, Digester 또는 XMLBeans과 같은 간단한 XML 직렬화 라이브러리가있을 수 있습니다.

  • +1

    이들은 바인딩 프레임 워크가 아니며 직렬화 라이브러리입니다. 좋은 바인딩 프레임 워크는 임의의 XML을 동형 오브젝트 그래프 또는 다시 역으로 매핑 할 수 있습니다. 이러한 간단한 직렬화 메커니즘은 고정 된 비표준 XML 스키마를 생성하고 소비합니다. – erickson

    +0

    감사합니다. erickson, 저는 JAXB에서만 작업했고 대안을 언급하고 싶습니다. 입력에 따라 답변을 수정하겠습니다. –

    +0

    실제로 XStream은 괜찮지 만 두 가지 모두 매우 간단하기 때문에 실제로는 간단하지 않습니다. 그리고 Digester는 단순하지 않고 단순합니다. – StaxMan

    22

    사용하지 않는 이유는 성능에 있습니다. 마샬링 및 언 마샬링 할 때 많은 오버 헤드가 발생합니다.또한 XML-Object가 바인딩에 대한 또 다른 API 고려하는 것이 좋습니다 - 등을 JiBX로를 : 당신이 XML 스키마 (xsd)로 정의 일부 외부 XML 스펙에 코딩해야하는 경우 http://jibx.sourceforge.net/

    +1

    바인딩에 문제가있는 경우 XSD2Jibx 도구 사용을 고려하십시오. "알파"상태이지만 XSD 스키마와 같이 클래스와 바인딩을 보여주는 데 유용합니다. 기본값, Java 유틸리티 날짜 대신 ... – MetroidFan2002

    +3

    헛소리. JAXB는 수동 바인딩에 비해 30-40 % 정도의 오버 헤드가있는 빠른 파서 (예 : Woodstox)를 사용하는 한 꽤 빠릅니다. JiBX는 문제가 없지만 성능 차이는 크지 않습니다. – StaxMan

    +6

    여러 프로젝트에서 JAXB를 사용하고 계속 사용하고 있습니다. 그러나 다른 프레임 워크와 비교하는 방법을 이해하는 것이 중요합니다. 수백 메가 바이트의 문서를 마샬링/언 마샬링하고 시간이 중요한 경우 - JiBX가 좋은 대안입니다. JAXB == 반영, JiBX == 바이트 코드 계측. – codefinger

    7

    JAXB가 크다.

    예를 들어, 당신은 거래 응용 프로그램이 있고 당신은 동네 짱 절름발이 전시회보고 앱에 거래를보고해야합니다 그들은 함께 승차로 당신에게 ultra.xsd을 부여했습니다. $JAVA_HOME/bin/xjc 컴파일러를 사용하여 XML을 여러 Java 클래스 (예 : UltraTrade)로 변환하십시오.

    그럼 그냥 UltraTrades에 무역의 객체를 변환하고 초 공사에 걸쳐 데이터를 마샬링하는 JAXB를 사용하는 간단한 어댑터 계층을 작성할 수 있습니다. 은 거래를 XML 형식으로 변환하는 것보다 쉽습니다.

    아래로 모든 휴식이

    울트라 공사는 실제로 자신의 스펙을 순종하지 않은 경우, 그리고 그들이 xsd:float로 다운이 무역 price 실제로 double로 표현되어야한다!

    +1

    또한 코드 우선을 수행 할 수 있습니다. 빈으로 시작하고 필요한 경우 스키마를 생성하십시오. – StaxMan

    17

    나는 직장에서 항상 JAXB를 사용하며 정말 좋아합니다. 항상 변화하는 복잡한 XML 스키마와 XML 파일의 태그 임의 액세스에 특히 적합합니다.

    나는 포주하는 것을 싫어하지만 방금 블로그를 시작했으며 이것은 문자 그대로 내가 게시 한 첫 번째 것입니다!

    은 여기를 체크 아웃 :

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

    +4

    블로그의 예를 분명히보십시오. 그것을 위해 upvoted. :-) –

    3

    은 또한 너무 JiBX는을 확인할 수 있습니다. 또한 OTA (Open Travel Alliance)에 특화되어 있으며 AXIS2 서버에서 지원되는 매우 우수한 xml 데이터 바인더입니다. 성능 및 호환성을 찾고 있다면, 당신은 그것을 확인하실 수 있습니다 :

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

    0

    JAXB는 기본 마샬링 최적화를 통해 향상된 성능을 제공합니다. JAXB는 Java 문서를 XML 문서와 읽고 쓰는 프로그래머 API를 정의하여 Java를 통한 XML 읽기 및 쓰기를 단순화합니다.

    4

    왜 JAXB가 필요한가요? 웹 서비스의 원격 구성 요소 (Java로 작성)는 XML을 사용하여 서로간에 메시지를 교환합니다. 왜 XML인가? XML은 제한된 리소스를 가진 네트워크에서 메시지를 교환하기위한 경량 옵션으로 간주되기 때문에. 종종 이러한 XML 문서를 객체로 변환하거나 그 반대로 변환해야합니다. 예 : 간단한 Java POJO Employee를 사용하여 직원 데이터를 원격 구성 요소 (Java 프로그램)로 보낼 수 있습니다.

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

    이 뽀조는 다음과 같이 XML 문서에 (마샬)로 변환해야합니다 다시 XML 문서 (UN-마샬)에서 자바 객체로,

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

    그리고 원격 구성 요소에서.

    JAXB 란 무엇입니까?

    JAXB는 마샬링 및 언 마샬링의이 작업을 수행하는 라이브러리 또는 도구입니다. 그것은이 두통에서 벗어나 간단합니다.

    관련 문제