'JAXB를 활용한 Java 객체의 XML 자동 변환'에 해당되는 글 1건

  1. 2012.01.26 JAXB를 활용한 Java 객체의 XML 자동 변환 1
반응형

JAXB를 활용한 Java 객체의 XML 자동 변환

Using JAXB for XML data binding

자바 SE 6에서 JAXB(Java Architecture for XML Binding)를 사용하여 JAVA -> XML 변환하는 테스트 샘플을 만들어 보았습니다. 물론 XStream으로도 가능합니다.

1. JAXB란?
JAXB를 사용하면 XML과 자바 간에 쉽게 앞뒤로 이동할 수 있습니다. JAXB 구현은 XML 스키마를 받아 해당 스키마에 매핑되는 자바 클래스를 생성하는 스키마 컴파일러를 제공합니다. XML 문서의 데이터는 JAXB의 바인딩 런타임 프레임워크를 통해, 스키마 컴파일러가 생성한 클래스에 자동으로 바인딩될 수 있습니다. 이 작업을 언마샬링(Unmarshalling)이라고 합니다. 언마샬링되면 필요에 따라 콘텐츠를 Java로 조작하거나 수정할 수 있습니다. JAXB는 자바 개체에서 XML 인스턴스 문서로 데이터를 쓸(마샬링할) 수도 있습니다.

2. 샘플 소스
*. Person bean 객체
package client;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "person")
public class Person
{
private String firstName;
private String lastName;
private Family family;

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public Family getFamily() {
return family;
}

public void setFamily(Family family) {
this.family = family;
}
}

*. Family bean 객체
package client;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;

public class Family
{
private String description;
@XmlElementWrapper(name = "persons")
@XmlElement
private List<Person> members = new ArrayList<Person>();


public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public List<Person> getMembers() {
return members;
}
}

*. Java객체를 Xml로 변환하는 클라이언트 샘플
package client;

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class JAXBClient
{
public static void main(String[] args) {
JAXBContext context = null;
List<Person> list = null;
Person person1 = null;
Person person2 = null;
Family family = null;
Marshaller marshaller = null;

try {
context = JAXBContext.newInstance(Person.class);
list = new ArrayList<Person>();

person1 = new Person();
family = new Family();

family.setDescription("Family Mimul");
person1.setFirstName("IlDong");
person1.setLastName("Hong");
person1.setFamily(family);
list.add(person1);

person2 = new Person();
person2.setFirstName("LeeDong");
person2.setLastName("Hong");
person2.setFamily(family);
list.add(person2);

// Marshal 객체를 XML로 변환
// Unmarshal the objects from XML

marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);

marshaller.marshal(person2, System.out);

} catch (JAXBException e) {
e.printStackTrace();
}
}
}


3. 실행 결과
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<person>
<family>
<persons/>
<description>Family Mimul</description>
</family>
<firstName>LeeDong</firstName>
<lastName>Hong</lastName>
</person>
Posted by 1010