ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] JAXB - Marshalling, UnMarshalling 사용법
    Java/기타 2019. 5. 18. 17:54
    반응형

    JAXB 이란?

     JAXB(Java Architecture for XML Binding)는 Java Object를 XML로 직렬화하고, XML을 Java Object로 역직렬화해주는 자바 API 입니다.  

    JDK6 ~ 9 버전은 JAXB가 내장되어 있어 라이브러리를 추가 할 필요가 없습니다. 

    JAXB Github - https://github.com/javaee/jaxb-v2

     

    JAXB Annotation

    @XmlRootElement - XML의 Root Element 명을 정의합니다.

    @XmlElement - XML의 Element 명을 정의합니다.

    @XmlType - XML 스키마 이름과 namespace를 정의합니다. propOrder 속성을 이용해서 XML 표현 시 요소들의 표현 순서를 정의합니다.

    @XmlElementWrapper - 다른 XML 요소들을 감싸는 역할을 합니다. List 같은 컬렉션 객체들을 XML 변환할 때 사용할 수 있습니다.

     

    Java Object를 XML로 변환

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    package com.tychejin.study.xml;
     
    import java.io.File;
    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 XmlExample01 {
     
        public static void main(String[] args) {
     
            User user = setUser();
     
            try {
     
                File file = new File("C:\\user.xml");
                JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
                Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
     
                jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
     
                jaxbMarshaller.marshal(user, file);
                jaxbMarshaller.marshal(user, System.out);
     
            } catch (JAXBException e) {
                e.printStackTrace();
            }
        }
     
        public static User setUser() {
     
            User user = new User();
            user.setName("XML");
            user.setAge(22);
     
            List<String> list = new ArrayList<String>();
            list.add("XML은 구조적인 데이터를 위한 것이다.");
            list.add("XML은 다소 HTML 같이 보인다.");
            list.add("XML은 텍스트이며, 읽히는 것만을 뜻하지 않는다.");
            list.add("XML은 크기가 커진다.");
            list.add("XML은 기술의 집합이다.");
            list.add("XML은 새로운 기술이 아니라 발전한 기술이다.");
            list.add("XML은 HTML에서 XHTML로 이끌었다.");
            list.add("XML은 모듈식이다.");
            list.add("XML은 RDF와 시맨틱 웹의 토대이다.");
            list.add("XML은 라이선스 제약이 없으며, 플랫폼이 독립적이고, 많은 지원이 있다.");
            user.setMessages(list);
            
            return user;
        }
    }
     
    cs

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    package com.tychejin.study.xml;
     
    import java.util.List;
     
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlElementWrapper;
    import javax.xml.bind.annotation.XmlRootElement;
     
    @XmlRootElement
    public class User {
     
        private String name;
        private int age;
        private List<String> messages;
     
        public String getName() {
            return name;
        }
     
        @XmlElement
        public void setName(String name) {
            this.name = name;
        }
     
        public int getAge() {
            return age;
        }
     
        @XmlElement
        public void setAge(int age) {
            this.age = age;
        }
     
        public List<String> getMessages() {
            return messages;
        }
     
        @XmlElementWrapper(name="messages")
        @XmlElement(name="message")
        public void setMessages(List<String> messages) {
            this.messages = messages;
        }
        
        @Override
        public String toString() {
            
            String result = "";
                    
            result = "[name:"+ name + ",age:"+ age +",messages:"+ messages +"]";
            
            return result;        
        }
    }
     
    cs

     

    JSON을 Java Object로 변환

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    package com.tychejin.study.xml;
     
    import java.io.File;
     
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Unmarshaller;
     
    public class XmlExample02 {
     
        public static void main(String[] args) {
     
            try {
     
                File file = new File("C:\\user.xml");
                JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
     
                Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
                User customer = (User) jaxbUnmarshaller.unmarshal(file);
                
                System.out.println(customer);
     
            } catch (JAXBException e) {
                e.printStackTrace();
            }
        }
    }
    cs

     

    반응형

    댓글

Designed by Tistory.