xstream을 이용한 Marshal, Unmarshal
참고 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 = 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