[스프링 3.0 OXM] 14. Marshalling XML using O/X Mappers 2
요약, 번역, 참조: 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 계층 구조로 변환해준다. 사용중인 툴이 마샬링과 언마샬링 예외를 구분하고 있지 않더라도,,. 스프링에서 이것을 구분해 준다.