Jackson은 Java 생태계에서 가장 널리 사용되는 데이터 바인딩 라이브러리 중 하나입니다. 원래 JSON 처리에 특화되어 있지만, jackson-dataformat-xml 모듈을 함께 사용하면 XML 형식의 데이터도 손쉽게 다룰 수 있습니다.
이 라이브러리는 강력한 데이터 바인딩 기능을 제공하여, 커스텀 Java 객체(POJO)를 JSON으로 직렬화하거나 그 반대로 역직렬화하는 작업을 간편하게 수행할 수 있습니다. 마찬가지 방식으로 XmlMapper 클래스의 readValue() 메서드를 사용하면 XML 문자열을 POJO 객체로 변환할 수 있습니다.
사전 준비: 의존성 추가
XML 변환 기능을 사용하려면 프로젝트에 아래 의존성을 추가해야 합니다.
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.15.2</version>
</dependency>
readValue() 메서드 문법
public <T> T readValue(XMLStreamReader r, Class<T> valueType) throws IOException
- r: 파싱할 XML 데이터가 담긴 입력 스트림 또는 문자열
- valueType: 변환될 대상 클래스 타입 (POJO 클래스)
예제 코드
아래 예제는 XML 문자열을 Person POJO 객체로 변환하는 전체 과정을 보여줍니다.
import com.fasterxml.jackson.dataformat.xml.*;
public class XMLToPOJOTest {
public static void main(String args[]) throws Exception {
try {
XmlMapper xmlMapper = new XmlMapper();
Person pojo = xmlMapper.readValue(getXmlString(), Person.class);
System.out.println(pojo);
} catch(Exception e) {
e.printStackTrace();
}
}
private static String getXmlString() {
return "<person> <firstName>Adithya</firstName>"
+ "<lastName>Jai</lastName>"
+ "<address>Bangalore</address></person>";
}
}
// POJO 클래스
class Person {
private String firstName;
private String lastName;
private String address;
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 String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Person[ " +
"firstName = " + firstName +
", lastName = " + lastName +
", address = " + address +
" ]";
}
}
코드 설명
- XmlMapper 인스턴스 생성:
new XmlMapper()로 XML 전용 매퍼 객체를 만듭니다. - readValue() 호출: XML 문자열과 대상 클래스(
Person.class)를 전달하면, Jackson이 XML 요소 이름과 POJO 필드 이름을 자동으로 매핑합니다. - 결과 확인: 변환된 객체의
toString()메서드를 통해 값이 올바르게 바인딩되었는지 확인할 수 있습니다.
실행 결과
Person[ firstName = Adithya, lastName = Jai, address = Bangalore ]
이처럼 Jackson의 XmlMapper를 활용하면 별도의 복잡한 파싱 로직 없이도 XML 데이터를 Java 객체로 깔끔하게 변환할 수 있습니다. 반대로 writeValueAsString() 메서드를 사용하면 POJO 객체를 XML 문자열로 직렬화하는 것도 가능하니, REST API 개발 시 유용하게 활용해 보시기 바랍니다.