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

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...