본문 바로가기

WEB_Programming

XStream 이용하기

Two Minute Tutorial

이것은 매우 빠르게 XStream을 소개하고 있는 문서이다. 간편하게 읽고, XML로 객체를 변환하는 방법과 역으로 수행하는 방법에 대해서 알 수 있도록 하고 있따.

Create classes to be serialized

여기 단순한 몇가지 클래스가 있다. XStream은 이것을 XML 로 변경하고, 다시 객체로 받아 올 수 있도록 한다.

public class Person {
private String firstname;
private String lastname;
private PhoneNumber phone;
private PhoneNumber fax;
// ... constructors and methods
}

public class PhoneNumber {
private int code;
private String number;
// ... constructors and methods
}

주의 : 필드는 private로 되어 있다는 것을 확인하기 바란다. XStream은 필드의 가시성에 대해서 신경쓰지 않는다. Getter/Setter메소드 역시 필요없다. XStream은 기본 생성자를 만들지 않아도 된다.

Initializing XStream

XStream을 이용할때, XStream 클래스를 이용하여 초기화 할 수 있다.

XStream xstream = new XStream();

xstream-[version].jar파일과 xpp3-[version].jar파일이 클래스 패스에 걸려 잇어야 한다. XPP3는 매우 빠른 속도로 XML의 전체를 파싱을 할 수 있도록 구현되어 있다. 만약 이러한 의존성을 연결하고싶지 않다면 표준 JAXP DOM 파서를 이용할 수 있다.

XStream xstream = new XStream(new DomDriver()); // does not require XPP3 library

주의 : 이 클래스는 단순하게 공통적인 오퍼레이션을 실행하기 위해서 fcade 디자인 패턴을 이용하고 있다. 더욱더 유연한 기능을 제공하기 위해서 퍼사드는 서로다른 행동을 취할 수 있도록 하고 잇다.

이제 XStream을 이용하여 XML을 만들어 보는 것을 해 볼 것이다. 현재 클래스를 위해서 앨리어스를 생성하고, XML  엘리먼트의 이름을 지정해 주도록 하고 잇따. 이것은 XStream을 이용하기 위해 필요한 매핑을 제공하며, 이것은 선택적인 부분이다.

xstream.alias("person", Person.class);
xstream.alias("phonenumber", PhoneNumber.class);

주의 : 이것은 선택적인 스텝이다. XStream은 이것없이도 잘 수행된다. 그러나 XML 엘리먼트 이름은 각 클래스의 fully qualified 이름(패키지 이름 포함)을 포함하여 쓰는것이 일반적이다. 이것은 Alias Tutorial을 보면 더욱 자세하게 설명하고 있다.

Serializing an object to XML

이제 Persion과 populate에 대한 인스턴스를 생성해 볼 차례이다.

Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));

이제 XML로 변경해 보자. 단순하게 XStream을 호출함으로 해서 이것을 만들수 있다.

String xml = xstream.toXML(joe);

XML의 결과는 다음과 같다.

<person>
<firstname>Joe</firstname>
<lastname>Walnes</lastname>
<phone>
<code>123</code>
<number>1234-456</number>
</phone>
<fax>
<code>123</code>
<number>9999-999</number>
</fax>
</person>

이것은 매우 심플하다. XML을 보면 매우 깔끔하게 만들어 졌다.

Deserializing an object back from XML

XML로 부터 객체를 다시 만들어 내는 방법은 다음과 같다.

Person newJoe = (Person)xstream.fromXML(xml);

아주 간단하다.

Summary

요약해보면..

  • 엘리먼트 이름을 클래스 이름 별명으로 변환하기 위해서는 xstream.alias(String elementName, Class cls)를 이용하라.
  • 객체를 XML로 변경하기 위해서는 xstream.toXML(Object obj);를 이용하라.
  • XML에서 객체로 변경하고자 할 경우에는 xstream.fromXML(String xml)을 이용하라.