JVM/Java

[Java] JAXB 활용한 Java 객체의 XML 변환 방법

헹창 2019. 7. 9.
반응형

JAXB 란?

위키백과를 보면 JAXB를 다음과 같이 정의한다.

JAXB(Java Architecture for XML Binding) 란 자바 클래스를 XML로 표현하는 자바 API이다.

 JAXB는 주로 2가지 기능이 있다.
 자바 객체를 XML로 직렬화하는 것이고 반대로 XML에서 자바 객체로 역직렬화하는 것이다.

 즉, JAXB는 메모리의 데이터를 XML 형식으로 변환하여 저장할 수 있고, 이 과정을 위해 프로그램의 각 클래스에서 XML을 읽고 저장하는 일을 구현해야 한다.

 

변환에 필요한 로직만 정리해보겠다.

 

 

VO 객체 설정

xml element로 사용할 객체에 @XmlRootElement 어노테이션을 등록한다.

@XmlRootElement(name="linkXmlVO")
@XmlAccessorType(XmlAccessType.FIELD)
@Component
public class LinkXmlVO {
    private String name;
    private String color;
    private String sex;
    private String url;
    @Override
    public String toString() {
        return "LinkXmlVO [name=" + name + ", color=" + color 
 + ", sex=" + sex + ", url=" + url + "]";
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        name = name;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        color = color;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        sex = sex;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        url = url;
    }
}
 

 

@XmlRootElement 로 linkXmlVO 객체를 xml의 <linkXmlVO>요소로 변환해준다.

 

@XmlRootElement(name = "linkXmlVOs")
@XmlAccessorType(XmlAccessType.FIELD)
@Component
public class LinkXmlVOs {
    @XmlElement(name="linkXmlVO")
    private List<LinkXmlVO> linkXmlVO = null;

    public List<LinkXmlVO> getLinkXmlVO() {
        return linkXmlVO;
    }

    public void setLinkXmlVO(List<LinkXmlVO> linkXmlVO) {
        this.linkXmlVO = linkXmlVO;
    }
}
 

 

마찬가지로 linkXmlVOs 객체를 xml의 <linkXmlVOs> 요소로 변환해준다.

 

 

JAXB 어노테이션의 자세한 속성은 아래 링크를 참고하자.

Link : https://howtodoinjava.com/jaxb/jaxb-annotations/

 

A Guide to JAXB Annotations - HowToDoInJava

Learn about JAXB annotations in detail along with their usage during marshalling and unmarshalling operations eg. @XmlRootElement, @XmlElement and @XmlList,

howtodoinjava.com

 

 

자바 객체를 XML 형식으로 변환하는 메소드

public void setXmlData(){
    JAXBContext jc = null;
    Marshaller marshaller = null;
        
    List<LinkXmlVO> list = new ArrayList<>();
    LinkXmlVOs linkXmlVOs = new LinkXmlVOs();
    LinkXmlVO linkXmlVO = new LinkXmlVO();

    try {
        jc = JAXBContext.newInstance(LinkXmlVOs.class);
    } catch (JAXBException e) {
        e.printStackTrace();
    }
    linkXmlVO.setName("haenny");
    linkXmlVO.setColor("blue");
    linkXmlVO.setSex("female");
    linkXmlVO.setUrl("https://www.naver.com/");
      
    list.add(linkXmlVO);
    linkXmlVOs.setLinkXmlVO(list);
      
    try {
        marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
          
        marshaller.marshal(linkXmlVOs, System.out);
    } catch (JAXBException e) {
        e.printStackTrace();
    }
}
 

 

 

실행결과

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<linkXmlVOs>
    <linkXmlVO>
        <name>haenny</name>
        <color>blue</color>
        <sex>female</sex>
        <url>https://www.naver.com/</url>
    </linkXmlVO>
</linkXmlVOs>
 

 

 

 

 

 

참고 사이트

 

Link : https://aljjabaegi.tistory.com/463

 

Java xml 파일 생성 및 내용 출력 방법 jaxb marshalling

Java xml 파일 생성 및 내용 출력 방법 jaxb marshalling 자바 클래스를 xml 로 변환하는 방법은 아래의 Link를 참고하세요. Link : JAVA Class -> JSON, XML 변환 출력 jaxb marshalling 마샬링 작스비 이번 포스..

aljjabaegi.tistory.com

 

728x90
반응형

댓글

추천 글