요약, 번역, 참조: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ch14s02.html

14.2 Marshaller와 Unmarshaller

14.2.1. Marshaller

스프링은 모든 마셜링 과정을 org.springframework.oxm.Marshaller 인터페이스로 추상화 시켰다. 주요 메서드는 다음과 같다.

public interface Marshaller {

    /**
     * Marshals the object graph with the given root into the provided Result.
     */
    void marshal(Object graph, Result result)
        throws XmlMappingException, IOException;
}

(실제로는 boolean supports(Class<?> clazz)  이것도 있음.)

메서드에 전달받은 Object graph를 javax.xml.transform.Result 객체로 변환해 준다. Result는 태깅 인터페이스로 기본적으로 XML을 추상화한 것이다. 다음과 같은 다양한 구현체들이 있다.

Result implementation    Wraps XML representation
DOMResult    org.w3c.dom.Node
SAXResult    org.xml.sax.ContentHandler
StreamResult    java.io.File, java.io.OutputStream, or java.io.Writer

노트: marshal 메서드가 Object 타입의 객체를 받긴 하지만, 대부분 임의의 객체를 전달하진 않는다. 맵핑 파일에 맵핑한 객체 또는 애노테이션을 표시해둔 객체, 마샬러에 등록한 객체 또는 임의의 상위 클래스를 지닌 객체를 넘긴다. 자세한 내용은 O/X 기술 선택 챕터를 참조하라.

14.2.2. Unmarshaller

Mashaller와 비슷하게 org.springframework.oxm.Unmarshaller 인터페이스도 있다.

public interface Unmarshaller {

    /**
     * Unmarshals the given provided Source into an object graph.
     */
    Object unmarshal(Source source)
        throws XmlMappingException, IOException;
}

(이 녀석도 boolean supports(Class<?> clazz) 이걸 가지고 있음)

javax.xml.transform.Source 타입의 객체를 넘겨주면 Object를 반환해준다. 다음과 같은 Source 구현체들이 있다.
 
Source implementation    Wraps XML representation
DOMSource    org.w3c.dom.Node
SAXSource    org.xml.sax.InputSource, and org.xml.sax.XMLReader
StreamSource    java.io.File, java.io.InputStream, or java.io.Reader

14.2.3. XmlMappingException

스프링은 사용중인 O/X 맵핑 툴의 예외 계층 구조를 XmlMappingExcpetion 계층 구조로 변환해준다. 사용중인 툴이 마샬링과 언마샬링 예외를 구분하고 있지 않더라도,,. 스프링에서 이것을 구분해 준다.