답변:
저는 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는이를 조작하는 데 도움이되었습니다.
사용하지 않는 이유가 있습니다. 성능이 저하됩니다. 마샬링 및 마샬링 해제시 상당한 오버 헤드가 있습니다. 또한 XML-Object 바인딩을위한 다른 API (예 : JiBX : http://jibx.sourceforge.net/) 를 고려할 수 있습니다.
"ORM for XML"입니다. WS Death Star 시스템을 위해 JAX-WS와 함께 가장 자주 사용됩니다 (실제로 Sun 구현은 함께 개발 됨).
저는 직장에서 항상 JAXB를 사용하며 정말 좋아합니다. 항상 변경되는 복잡한 XML 스키마에 적합하며 특히 XML 파일의 태그에 대한 임의 액세스에 적합합니다.
나는 포주를 싫어하지만 방금 블로그를 시작했고 이것은 말 그대로 내가 게시 한 첫 번째 것입니다!
여기에서 확인하세요 :
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
JAXB를 사용하면 객체의 XML 표현 (마샬링)과 XML의 객체 표현 (비 마샬링)을 자동으로 생성 할 수 있습니다.
XML 스키마에 관한 한 두 가지 선택이 있습니다.
대안이 될 수있는 XStream , Digester 또는 XMLBeans 와 같은 더 간단한 XML 직렬화 라이브러리도 있습니다.
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
!
왜 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 작업을 수행하는 라이브러리 또는 도구입니다. 그렇게 간단하게이 두통에서 벗어날 수 있습니다.
JIBX도 확인할 수 있습니다. 또한 OTA (Open Travel Alliance)에 특화되어 있고 AXIS2 서버에서 지원하는 매우 우수한 xml 데이터 바인더이기도합니다. 성능과 호환성을 찾고 있다면 다음을 확인하십시오.
JAXB는 기본 마샬링 최적화를 통해 향상된 성능을 제공합니다. JAXB는 XML 문서에서 Java 객체를 읽고 쓰기위한 프로그래머 API를 정의하여 Java를 통한 XML 읽기 및 쓰기를 단순화합니다.