ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAXB(Java Architecture for XML Binding)
    Java 2016. 9. 7. 17:38

    JAXB(Java Architecture for XML Binding)

    단계별로 JAXB2에 대해서 알아보겠습니다. 여기서는 JAXB 버전 2를 기반으로합니다. JAXB는 자바 객체를 XML과 바인딩하기 위한 자바 아키텍처로 가장 인기있는 API 및 산업 표준 중 하나입니다. 인터넷을 통해 통신하는 웹 서비스를 사용하는 곳에서 많이 사용됩니다. 표준 API는 (JDK 버전 1.6에서 시작) JDK와 함께 제공합니다.

           Marshalling : 자바 객체를 XML문서로 만듭니다.
           UnMarshalling : XML문서를 자바 객체로 만듭니다.
           JAXB Annotations : JAXB annotation을 사용합니다.
    

    JAXB2 Annotations

    1. @XmlRootElement : 특정 클래스에 의해 생성 된 XML 문서의 루트 엘리먼트를 지정할 수있다. 기본적으로 클래스 이름이 루트 요소로 사용되지만 name속성을 통해 사용되는 다른 이름을 지정할 수 있습니다.

      예) @XmlRootElement(name = "Student")
      
    2. @XmlType : XML 요소를 생성 할때 XML에 표시되는 순서를 지정한다. 순서를 지정할 때는 propOrder속성을 이용한다.

      예) @XmlType(propOrder = { "firstName", "lastName", "dob", "section" })
      
    3. @XmlAccessorType : 메소드 레벨 또는 필드 레벨에 사용할 수있다.

      예) @XmlAccessorType(XmlAccessType.FIELD)
      
    4. @XmlAttribute : XML의 속성에 자바 빈 속성을 매핑합니다.

       예) @XmlAttribute(name = "id")
      
    5. @XmlElement : XML 요소에 자바 빈 속성을 매핑합니다. 기본적으로 한 번 @XmlRootElement클래스 레벨에서 선언 된 모든 속성 (또는 필드)가 다른 decared하지 않는 한, 자바 빈 속성 이름과 같은 이름을 가진 XML 요소로 간주됩니다 원하는 경우 name 속성을 사용하여 다른 이름을 지정할 수 있습니다.

      예) @XmlElement(name = "last-name")
      
    6. @XmlElementWrapper : 요소의 컬렉션 래퍼를 만드는 데 사용할 수 있습니다.

      예) 아래처럼 지정하고
      @XmlElementWrapper(name="all-subjects")
      @XmlElement(name="subject")
      private List<String> subjects;
      
      다음과 같이 데이터를 넣으면 
      List<String> subjects = new ArrayList<String>();
      subjects.add("Maths");
      subjects.add("Science");
      subjects.add("Economics");
      
      결과는 아래와 같이 생성된다.
      <all-subjects>
         <subject>Maths</subject>
         <subject>Science</subject>
         <subject>Economics</subject>
      </all-subjects>
      
    7. @XmlList : @XmlList 공간이 구분 문자와 같은 요소들의 집합을 나타내는 데 사용될 수있다.

        예) 아래처럼 지정하면 
        @XmlList
        private List<String> groups;
      
        다음과 같이 데이터를 넣으면 
        List<String> groups = new ArrayList<String>();
        groups.add("Techies");
        groups.add("Volunteers");
      
        결과는 아래와 같이 생성된다.
        <groups>Techies Volunteers</groups>
      
    8. @XmlTransient : XML 매핑에서 제외 할 수 있습니다. 기본적으로 @XmlRootElement클래스 레벨에 존재하는 모든 요소는 XML로 매핑됩니다, 하지만 @XmlTransient로 정의할 경우 XML에 표시되지 않습니다.

       예) @XmlTransient
           private String section;
      
    9. @XmlJavaTypeAdapter : XML 형태와 자바 형식 변환에 사용하는 어댑터를 지정하기 위해 사용될 수있다.

        예) 아래처럼 지정하면
        @XmlElement(name = "birthDate")
        @XmlJavaTypeAdapter(LocalDateAdapter.class)
        private LocalDate dob;
      
        LocalDateAdapter클래스의 내용대로 아래와 같이 출력된다.
        <birthDate>1956-10-01</birthDate>
      
        LocalDateAdapter클래스는 XmlAdapter클래스를 상속해서 만든다.
      
         import javax.xml.bind.annotation.adapters.XmlAdapter;
         import org.joda.time.LocalDate;
      
         public class LocalDateAdapter extends XmlAdapter<String, LocalDate> {
             public LocalDate unmarshal(String v) throws Exception {
                 return new LocalDate(v);
             }
             public String marshal(LocalDate v) throws Exception {
                 return v.toString();
             }
         }


    'Java' 카테고리의 다른 글

    십이지신 계산하기1  (0) 2017.04.28
    JDK설치하기  (0) 2016.09.09
    Lambda Expression 05  (0) 2016.08.09
    Lambda Expression 04  (0) 2016.08.09
    JPA(Java Persistent API)  (0) 2016.08.01

    댓글

Designed by Tistory.