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

Java Architecture for XML Binding (JAXB)를 이용한 Marshal, Unmarshal

B컷개발자 2013. 2. 6. 11:23
728x90


참고 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));


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


728x90