2011년 5월 23일 월요일

Apache XML-Beans을 이용한 Object marshalling과 unmarshalling

지난 글에서 살펴 보왔던 JAXB에 이어서 이번에는 Apache XMLBeans을 살펴 보겠습니다.

XML-Beans?
XMLBeans는 JAXB표준에서 벗어나 있지만 표준인 JAXB보다 먼저 발표 되었으며 XMLBeans는 W3C의 XML 스키마를 완전하게 지원한다는 장점을 가지고 있습니다. XMLBeans는 BEA가 아파치에 기증한 프로젝트이며 현재 버전 2.0 beta까지 발표 되어있으며 최신 버전은 1.0.4 입니다.
관련 사이트 : http://xmlbeans.apache.org/index.html

설치
2. 다운로드 받은 파일을 적당한 곳에서 압축을 푼다.
3. xmlbeans_home의 bin 디렉토리를 path에 lib 디렉토리 밑의 *.jar파일을 classpath에 잡는다.

XML-Beans를 이용한 Sample Program
Sample 프로그램의 기본 구성 및 XML 스키마는 JAXB Sample과 동일하게 구성한다.

1. 전송 전문 XML 스키마 작성
“user.xsd” 파일 내용
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd" />
<xs:element name="userinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="age" type="xs:int" />
<xs:element name="phone" type="xs:int" />
<xs:element name="memberLevel" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>


2. XML 스키마로부터 클래스 생성
작성된 XML 스키마로부터 객체 마샤링과 언마샤링에 사용할 클래스를 축출합니다.
“scomp –out user.jar user.xsd”
참고 : “scomp”을 이용하여 객체를 생성하지만 Linux, Unix에요 Shell 스크립트가 없으면 다음과 같이 입력하여 생성한다.
“java org.apache.xmlbeans.impl.tool.SchemaCompiler -out user.jar user.xsd”
3. 서버 프로그램 작성
Marshal
import noNamespace.UserinfoDocument;
import org.apache.xmlbeans.XmlOptions;
public class userInfoMarshal {
public static void main(String args[]) {
UserinfoDocument userDoc;
UserinfoDocument.Userinfo userElement;
XmlOptions xmlOptions;
// Instance 생성
userDoc = UserinfoDocument.Factory.newInstance();
// addNewUserinfo 메소드는 document 객체를 생성한다.
userElement = userDoc.addNewUserinfo();
userElement.setName("Hurukku");
userElement.setAge(31);
userElement.setPhone(121212);
xmlOptions = new XmlOptions();
xmlOptions.setSavePrettyPrint();
xmlOptions.setSavePrettyPrintIndent(4);
xmlOptions.setCharacterEncoding("UTF-8");
String xmlStr = userDoc.xmlText(xmlOptions);
System.out.println("XML Instance Document is : nnn" + xmlStr );
}
}


Unmarshal
import noNamespace.*;
public class userInfoUnMarshal {
public static void main(String args[]) {
try {
String xmlString = ""
+"<userinfo>"
+" <name>Hurukku</name>"
+" <age>32</age>"
+" <phone>121212</phone>"
+"</userinfo>";
UserinfoDocument userDoc = UserinfoDocument.Factory.parse(xmlString);
UserinfoDocument.Userinfo userElement = userDoc.getUserinfo();
System.out.println("Name " + userElement.getName());
System.out.println("Age " + userElement.getAge());
System.out.println("Phone " + userElement.getPhone());
} catch (Exception e) {
e.printStackTrace();
}
}
}

JAXB 샘플보다 예제를 간단하게 작성하였다. 샘플이 단순하고 직관적이기 때문에 부연 설명은 하지 않는다.

4. 실행
Marshal
XML Instance Document is :
<userinfo>
<name>Hurukku</name>
<age>31</age>
<phone>121212</phone>
</userinfo>
Unmarshal
Name Hurukku
Age 32
Phone 121212

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...