Java Architecture for XML Binding (JAXB)를 이용한 Marshal, Unmarshal
참고 http://www.oracle.com/technetwork/articles/javase/index-140168.html
Bean 객체를 XML로 변환하고 XML를 Bean 객체로 자연스럽게 구조와 데이터를 Serialization/Deserialization 시켜준다.
어노테이션을 사용함.
1. Marshal, Unmarshal할 대상 Bean에 어노테이션을 붙여준다.
| 예) @XmlAccessorType(XmlAccessType.FIELD) // 노드 접근 순서 @XmlRootElement // 최상위 ROOT 노드 정의 public class User { private String id; private String password; @XmlTransient // 무시하는 필드 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할 기능 작성 - JAXBContext 객체를 이용
예) User user = new User(); user.setId("id"); user.setPassword("password"); user.setName("name"); //대상 객체에 대한 컨텍스트 객체 생성 JAXBContext ctx = JAXBContext.newInstance(User.class); // 마샬링 객체 생성 Marshaller marshaller = ctx.createMarshaller(); //XML 아웃풋 포멧 설정 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); |
3. XML을 출력할 스트림 지정 (Object to XML)
| 예) //출력 스트림을 Wrtier, OutputStream, 등으로 지정가능 Writer writer = new StringWriter(); marshaller.marshal(user, writer); |
4. XML을 읽을 객체 지정 (XML to Object)
예) // 언마샬링 객체는 컨텍스트 객체에서 따로 생성하여야함. Unmarshaller unmarshaller = ctx.createUnmarshaller(); //인풋스트림을 Reader, InputStream, 등으로 지정가능 Reader reader = new StringReader(writer.toString()); Object obj = unmarshaller.unmarshal(new InputSource(reader)); |
편하지만 성능은 생각해야함.