기술과 산업/언어 및 프레임워크

xstream을 이용한 Marshal, Unmarshal

B컷개발자 2013. 3. 12. 16:47
728x90

참고 http://xstream.codehaus.org/index.html


기본적인 기능은 JAXB와 같음. JAVA to XML, XML to JAVA.


어노테이션을 사용함.


1. Marshal, Unmarshal할 대상 Bean에 어노테이션을 붙여준다.



예)

package com.tistory.codesnippet.xstream.model;


import com.thoughtworks.xstream.annotations.XStreamAlias;


@XStreamAlias("user")  

public class User {

private String id;

private String password;

private String name;

public String getId() {

return id;

}


public void setId(String id) {

this.id = id;

}


public String getPassword() {

return password;

}


public void setPassword(String password) {

this.password = password;

}


public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "[id=" + id + ", password=" + password + ", name=" + name +  "]";

}

} 



2. Marshal, Unmarshal할 기능 작성 - XStream객체를 이용


예)
//빈 객체 생성

User user = new User();

user.setId("id");

user.setPassword("password");

user.setName("name");


//대상 객체에 대한 컨텍스트 객체 생성

// StAX 혹은 Dom으로 사용가능

XStream xstream = new XStream(new StaxDriver());

//XStream xstream = new XStream(new DomDriver("UTF-8"));


// 사용할 객체 등록

xstream.alias("user", User.class);



3. XML을 출력할 스트림 지정 (Object to XML)


예)

//단순 변환

String xml = xstream.toXML(user);


// 인코딩 처리

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

Writer writer = new OutputStreamWriter(outputStream, "UTF-8");

writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n");

xstream.toXML(user, writer);

String xml = writer.toString();

String xml = outputStream.toString();



4. XML을 읽을 객체 지정 (XML to Object)


 예)

// 단순 변환

User newUser = (User) xstream.fromXML(xml);


// 스트림 처리

byte[] buf = xml.getBytes("UTF-8"); // 읽어들인 xml

ByteArrayInputStream inputStream = new ByteArrayInputStream(buf);

Reader reader = new InputStreamReader(inputStream, "UTF-8");

User newUser = (User) xstream.fromXML(reader);


편하지만 성능은 생각해야함.


성능 테스트를 해보는것도 좋은 방법일 듯


비교 http://codesnippet.tistory.com/category/JAVA/JAXB




728x90