[스프링 3.0 OXM] 14. Marshalling XML using O/X Mappers 3
참조: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ch14s03.html
14.3 Marshaller와 Unmarshaller 사용하기
다음은 마샬링, 언마샬링에서 사용할 JavaBean이다.
public class Settings {
private boolean fooEnabled;
public boolean isFooEnabled() {
return fooEnabled;
}
public void setFooEnabled(boolean fooEnabled) {
this.fooEnabled = fooEnabled;
}
}
다음 Application에서는 위의 객체를 settings.xml로 저장하고 다시 그것을 읽어들인다.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.Unmarshaller;
public class Application {
private static final String FILE_NAME = "settings.xml";
private Settings settings = new Settings();
private Marshaller marshaller;
private Unmarshaller unmarshaller;
public void setMarshaller(Marshaller marshaller) {
this.marshaller = marshaller;
}
public void setUnmarshaller(Unmarshaller unmarshaller) {
this.unmarshaller = unmarshaller;
}
public void saveSettings() throws IOException {
FileOutputStream os = null;
try {
os = new FileOutputStream(FILE_NAME);
this.marshaller.marshal(settings, new StreamResult(os));
} finally {
if (os != null) {
os.close();
}
}
}
public void loadSettings() throws IOException {
FileInputStream is = null;
try {
is = new FileInputStream(FILE_NAME);
this.settings = (Settings) this.unmarshaller.unmarshal(new StreamSource(is));
} finally {
if (is != null) {
is.close();
}
}
}
public static void main(String[] args) throws IOException {
ApplicationContext appContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
Application application = (Application) appContext.getBean("application");
application.saveSettings();
application.loadSettings();
}
}
위에서 설정할 Marshaller와 Unmarshaller는 다음 스프링 설정 파일에서 설정한다.
<beans>
<bean id="application" class="Application">
<property name="marshaller" ref="castorMarshaller" />
<property name="unmarshaller" ref="castorMarshaller" />
</bean>
<bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller"/>
</beans>
위 설정에서 사용한 Marshaller는 Castor 라이브러리인데, 이 것은 부가적인 설정이 필요 없기 때문에 빈 설정이
간단하다. 도한 CastorMarshaller가 스프링의 Mashaller와 Unmashaller를 모두 구현하고 있다. 따라서
이 빈이 Application의 Marshaller와 Unmashaller에 설정된다. 위 애플리케이션은 다음과 같은 XML
파일을 만들어 낸다.
<?xml version="1.0" encoding="UTF-8"?>
<settings foo-enabled="false"/>