Dev/JAVA

Marshal & Unmarshal

호나우지규 2021. 9. 28. 18:24

unmarshal : XML -> 자바 객체 

marshal : 자바 객체 -> XML

 

이것을 하는것이 JAXBf라는 JAVA API

 

❗️주의할 점❗️

thread-safe JAXBContext의 경우는 1회 생성 후 재사용을 권자.

생성 비용이 적지 않기 떄문에 마샬/언마샬을 수행될 때마다 매번 생성하는 것보다 한 번 생성하고 재사용하는 편이 좋음

 

다만, marshaller & unmarshaller의 경우 스레드 안전하지 않기 때문에 마샬/언마샬이 수행될 때마다 다시 생성하는 것을 권장.

다행히 비용은 크지않음

 

Marshaller

public interface Marshaller {

   public void marshal( Object jaxbElement, javax.xml.transform.Result result )

        throws JAXBException;

}

 

XML로 변환할 자바 객체와 결과갑을 담을 Result 타입의 객체를 넘겨주면 XML 결과를 Result 타입의 result 변수에 반환

 

UnMarshaller

public interface Unmarshaller {

   public Object unmarshal( javax.xml.transform.Source source )

        throws JAXBException;

}

Source 타입의 오브젝트를 주면, 설정에서 지정한 OXM 기술을 이용해 자바 객체 트리로 변환하고, 루트 객체를 반환

 

 

 

 

 

++ Spring OXM

 

OXM - XML 과 자바 객체를 매핑해서 상호 변환해주는 기술

 

JAXB가 비록 JavaSE, JavaEE의 표준이긴 하지만 다양한 OXM 기술이 존재

Castor XMLK, JiBX, XmlBeans, Xstream - XML 바인딩 기술 (JAXB 마찬가지)