-
xstream을 이용한 Marshal, Unmarshal개발 2013. 3. 12. 16:47반응형
참고 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
반응형'개발' 카테고리의 다른 글
Java First using JAX-WS APIs 예제 에러 해결 (0) 2013.03.13 CXF 유저가이드의 샘플 Checkout 받기 (0) 2013.03.13 [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! (1) 2013.03.12 Using the Timer Scheduler (0) 2013.03.08 Using the Quartz Scheduler (0) 2013.03.08