JAXB 란 무엇이며 왜 사용해야합니까? [닫은]


109

여기에 JAXB가 슬라이스 빵 이후로 가장 위대한 것이라고 맹세하는 사람이 있습니다. Stack Overflow 사용자가 사용 사례가 JAXB에 대한 것이라고 생각하는 것과 그 사례에 대한 좋은 또는 나쁜 솔루션이 무엇인지 궁금합니다.


2
이 기사 (JAXB (Java Architecture for XML Binding))를 읽으십시오. 이것이 가장 좋습니다. URL : oracle.com/technetwork/articles/javase/index-140168.html#unmars

답변:


99

저는 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는이를 조작하는 데 도움이되었습니다.


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

7
JAXB는 스펙 (예 : JPA 또는 JAXP)이며, 이는 여러 구현 (Metro, EclipseLink 등)이 있음을 의미합니다. 하나에 문제가있는 경우 다른 구현으로 전환 할 수 있습니다. 또한 다른 공급 업체에서 제공하는 확장 기능을 활용할 수도 있습니다.
bdoughan 2010

@BlaiseDoughan, Metro는 JAXB 구현입니까?! Metro는 WSIT 구현이 아닙니까?
Muhammad Gelbana 2013 년

1
@MuhammadGelbana- Metro JAX-WS 구현 ( metro.java.net )의 일부인 Project JAXB ( jaxb.java.net ) 로 언급해야한다고 생각합니다 .
bdoughan 2013-08-26

2
참고로 JAXB는 Java SE 11에서 제거됩니다. JEP 320 : Java EE 및 CORBA 모듈 제거를 참조하십시오 . 이 조치는 Java SE 모듈화Jakarta EE 프로젝트 로 의 Java EE 기술 인수의 일부로 취해집니다 . 프로젝트에 JAXB API 및 구현을 추가해야합니다.
Basil Bourque

23

사용하지 않는 이유가 있습니다. 성능이 저하됩니다. 마샬링 및 마샬링 해제시 상당한 오버 헤드가 있습니다. 또한 XML-Object 바인딩을위한 다른 API (예 : JiBX : http://jibx.sourceforge.net/) 를 고려할 수 있습니다.


1
또한 바인딩에 문제가있는 경우 XSD2Jibx 도구를 사용하는 것이 좋습니다. "알파"상태이지만 XSD 스키마에서 좋아하는 클래스와 바인딩을 설명하는 데 정말 도움이됩니다. 기본적으로 SQL 날짜 사용을 중지 한 경우에만 , 대신 Java util Date를 사용했습니다 ...
MetroidFan2002

3
엉터리. JAXB는 빠른 파서 (예 : Woodstox)를 사용하는 한 매우 빠르며 수동 바인딩에 비해 오버 헤드가 30-40 % 정도입니다. JiBX는 괜찮습니다. 문제는 없지만 성능 차이는 크지 않습니다.
StaxMan

6
여러 프로젝트에서 JAXB를 사용했으며 계속 사용하고 있습니다. 그러나 다른 프레임 워크와 어떻게 비교되는지 이해하는 것이 중요합니다. 수백 메가 바이트의 문서를 마샬링 / 마샬링 해제하고 시간이 중요한 경우 JiBX가 좋은 대안입니다. JAXB == 반사, JiBX == 바이트 코드 계측.
codefinger

19

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


19

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

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

여기에서 확인하세요 :

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


4
블로그의 명확한 예. 그것에 대해 찬성했습니다. :-)
Shawn D.

9

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

XML 스키마에 관한 한 두 가지 선택이 있습니다.

  • XSD에서 Java 클래스 생성
  • Java 클래스에서 XSD 생성

대안이 될 수있는 XStream , Digester 또는 XMLBeans 와 같은 더 간단한 XML 직렬화 라이브러리도 있습니다.


1
이들은 바인딩 프레임 워크가 아니라 직렬화 라이브러리입니다. 좋은 바인딩 프레임 워크는 모든 XML을 동형 개체 그래프에 매핑하거나 다시 그 반대로 매핑 할 수 있습니다. 이러한 간단한 직렬화 메커니즘은 고정 된 비표준 XML 스키마를 생성하고 사용합니다.
erickson

감사합니다 erickson, 저는 JAXB로만 작업했으며 대안을 언급하고 싶었습니다. 귀하의 입력에 따라 제 답변을 편집하겠습니다.
Fabian Steeg

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

2
누군가 주석을 사용하여 JAXB-2.0을 언급하십시오. 몇 개의 XmlAdapter 클래스 사이에서 모든 스키마를 기존 Java 구조에 매핑 할 수 있습니다.
Mark Renouf

8

JAXB는 XML 스키마 ( xsd) 로 정의 된 일부 외부 XML 사양으로 코딩해야하는 경우 유용 합니다.

예를 들어, 거래 애플리케이션이 있고 거래를 Uber Lame Trade Reporting 앱에 진행할ultra.xsd있도록 제공 했습니다. $JAVA_HOME/bin/xjc컴파일러를 사용하여 XML을 일련의 Java 클래스 (예 :)로 변환합니다 UltraTrade.

그런 다음 간단한 어댑터 레이어를 작성 하여 거래 대상을UltraTrades 하고를 사용 JAXB하여 데이터를 Ultra-Corp로 마샬링 할 수 있습니다. 거래를 XML 형식으로 변환하는 것보다 훨씬 쉽습니다.

모든 것이 무너지는 곳은 Ultra-Corp가 실제로 자체 사양을 따르지 않았을 때이며, price그들이 a로 내린 거래 xsd:float는 실제로 double!


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

7

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

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

이 Pojo는 다음과 같이 XML 문서로 변환 (Marshall)해야합니다.

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

그리고 원격 구성 요소에서 XML 문서 (Un-Marshall)에서 Java 객체로 돌아갑니다.

JAXB 란 무엇입니까?

JAXB는 Marshalling 및 UnMarshalling 작업을 수행하는 라이브러리 또는 도구입니다. 그렇게 간단하게이 두통에서 벗어날 수 있습니다.


4

JIBX도 확인할 수 있습니다. 또한 OTA (Open Travel Alliance)에 특화되어 있고 AXIS2 서버에서 지원하는 매우 우수한 xml 데이터 바인더이기도합니다. 성능과 호환성을 찾고 있다면 다음을 확인하십시오.

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


0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.