В этой главе описаны средства поддержки отображения (преобразования) объектов и данных формата XML в Spring. Отображение (преобразование) объектов и данных формата XML (сокращенно O-X-отображение) – это акт преобразования XML-документа в объект или преобразования объекта в XML-документ. Этот процесс преобразования также известен как XML-маршализация или XML-сериализация. В данной главе эти термины используются как взаимозаменяемые.

В части O-X-отображения маршализатор (marshaller) отвечает за сериализацию объекта (графа) в XML. Аналогичным образом демаршализатор десериализует XML в граф объектов. Этот XML может принимать форму документа DOM, входного или выходного потока или SAX-обработчика.

Некоторыми из преимуществ использования Spring для создания Map (отображений) O/X явялются:

  • Простота конфигурирования

  • Согласованные интерфейсы

  • Согласованная иерархия исключений

Простота конфигурирования

Фабрика бобов Spring позволяет легко настроить маршализаторы, без необходимости построения JAXB-контекста, фабрики связывания JiBX и так далее. Можно конфигурировать маршализаторы так же, как и любой другой бин в контексте вашего приложения. Кроме того, для ряда маршализаторов доступна конфигурация на основе пространства имен XML, что делает конфигурирование еще проще.

Согласованные интерфейсы

O-X-отображение в Spring работает через два глобальных интерфейса: Marshaller и Unmarshaller. Эти абстракции позволяют с относительной легкостью переходить от одного O-X-фреймворка к другому, при этом классы, выполняющие маршализацию, практически не требуют изменений. Этот подход имеет дополнительное преимущество, позволяя выполнять XML-маршализацию с использованием смешанного подхода (например, часть маршализации выполняется с помощью JAXB, а часть – с помощью XStream) неинтрузивным (не нарушающим целосность) способом, позволяя использовать сильные стороны каждой технологии.

Согласованная иерархия исключений

Spring обеспечивает преобразование исключений из базового инструмента O-X-отображения в собственную иерархию исключений с XmlMappingException в качестве корневого исключения. Эти исключения во время выполнения оборачивают исходное исключение, поэтому информация не теряется.