Spring Oxm 简明教程

Spring OXM - Overview

Spring 框架使用全局 marshall/unmarshall 接口提供对象/XML 或 O/X 映射,并允许轻松切换 O/X 映射框架。将对象转换为 XML 的此过程称为 XML 编组/序列化,而将 XML 转换为对象的过程称为 XML 解编组/反序列化。

Spring 框架提供了一个 Marshall 和 UnMarshaller 接口,其中 Marshall 接口负责将对象编组到 XML,而 UnMarshaller 接口将 xml 反序列化到一个对象。以下是使用 Spring OXM 框架的主要优点。

  1. Easy Configuration − 通过使用 spring bean context 工厂,创建 marshall/unmarshall 非常容易,并且可配置,而无需担心 O/X 库结构,如 JAXB Context、JiBX binding 工厂等。marshall/unmarshall 可配置为任何其他 bean。

  2. Consistent Interfacing − Marshall 和 UnMarshaller 是全局接口。这些接口提供了一个对其他 O/X 映射框架 抽象的层,并允许在它们之间切换,而无需更改代码或进行少量代码更改。

  3. Consistent Exception Handling − 所有底层异常都映射到 XmlMappingException 作为根异常。因此,开发人员不必担心底层 O/X 映射工具自己的异常层次结构。

Marshaller

Marshaller 是一个具有单个方法 marshal 的接口。

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

其中 graph 是要编组的任意对象,而 result 是表示 XML 输出的标记接口。以下是可用类型−

  1. javax.xml.transform.dom.DOMResult − Represents org.w3c.dom.Node.

  2. javax.xml.transform.sax.SAXResult − Represents org.xml.sax.ContentHandler.

  3. javax.xml.transform.stream.StreamResult − 表示 java.io.File、java.io.OutputStream 或 java.io.Writer。

UnMarshaller

UnMarshaller 是一个具有单个方法 unmarshal 的接口。

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

其中 source 是用于表示 XML 输入的标记化界面。以下是可用的类型:

  1. javax.xml.transform.dom.DOMSource − Represents org.w3c.dom.Node.

  2. javax.xml.transform.sax.SAXSource − 表示 org.xml.sax.InputSource 和 org.xml.sax.XMLReader。

  3. javax.xml.transform.stream.StreamSource − 表示 java.io.File、java.io.InputStream 或 java.io.Reader。