Language/XML

XML, JAXB 요소

만땅땅 2020. 4. 22. 16:41

XML(Extensible Markup Language)

W3C에서 개발

다목적 마크업 언어

기계는 인간의 언어를 읽거나 이해할 수 없는 계산기에 불과, XML과 같은 구조화된 마크업 언어들은 인간이 읽을 수 있으며, 이를 기계에 적용시키는 타협점이 됨

텍스트 데이터 형식으로 Unicode를 사용해 전 세계 언어를 지원

 

OXM(Object XML Mapping)

Marshalling, Unmarshalling

 

JAXB(Java Architecture for XML Binding)

OXM을 쉽게 도와주는 도구

JAXB Annotation을 사용하여 직관적이고 쉽게 OXM 가능

 

주요 JAXB Annotation

@XmlAccessorType

XML 데이터를 어떤 방법으로 serialize할지에 대한 annotation

property의 serializability를 결정

모든 getter/setter 쌍을 JAXB에서는 serialize하려고 하는데, 여기서 제외하고자 할 경우 getter 혹은 setter에 @XmlTransient를 사용

static/transient 필드는 JAXB serialize 목록에서 제외

getter/setter가 존재하지 않는 public 멤버 변수를 JAXB의 serialize 목록에 추가하고자 하면 @XmlElement, @XmlAttribute로 명시

@XmlAccessorType = NONE : XmlElement로 annotated된 field와 property만 serialized (필드 및 getter/setter에 설정)

FIELD : 모든 field를 serialized (필드 설정)

PROPERTY : 모든 property를 serialized (public getter/setter에 설정)

PUBLIC_MEMBER : public field와 property를 serialized (public 필드 혹은 public getter/setter에 설정)

@XmlRootElement

Class에 사용하는 annotation

해당 클래스가 XML 특정 노드의 root를 의미

name을 사용하여 root 명시

@XmlElement

변수에 사용하는 annotation

해당 변수가 XML 노드임을 뜻함

XmlRootElement로 선언된 영역에서 해당 변수 이름과 매핑하려는 XML 데이터 노드 이름이 같다면 굳이 명시해주지 않아도 됨

@XmlElement(defaultValue = "")

@XmlElement(name = "")

@XmlElement(required = true)

@XmlElementWrapper

해당 변수가 특정 노드들을 감싸고 있는 Wrapper임을 명시해주는 annotation

@XmlSchemaType

//Example: Code fragment
public class USPrice {
     @XmlElement
     @XmlSchemaType(name="date")
     public XMLGregorianCalendar date;
}

<!-- Example: Local XML Schema element -->
<xs:complexType name="USPrice"/>
     <xs:sequence>
       <xs:element name="date" type="xs:date"/>
     </sequence>
</xs:complexType>

@XmlAttribute

// Example: Code fragment
class Foo {
     ...
     @XmlAttribute List<Integer> items;
} 

<!-- Example: XML Schema fragment -->
<xs:complexType name="foo">
       ...
   <xs:attribute name="items">
     <xs:simpleType>
     <xs:list itemType="xs:int"/>
   </xs:simpleType>
</xs:complexType>

 

 

참고

https://skibis.tistory.com/338

https://code.google.com/archive/p/smw2010-prj3-rest/wikis/JAXBSummary.wiki