Spring OXM - 概述


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

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

  • 轻松配置- 使用 spring bean 上下文工厂,创建编组器/解组器非常简单,并且可以配置,无需担心 O/X 库结构,如 JAXB 上下文、JiBX 绑定工厂等。编组器/解组器可以像任何其他 bean 一样配置。

  • 一致的接口- Marshaller 和 UnMarshaller 是全局接口。这些接口在其他 O/X 映射框架之上提供了一个抽象层,并允许在不更改代码或几乎不需要更改代码的情况下在它们之间进行切换。

  • 一致的异常处理- 所有底层异常都映射到 XmlMappingException 作为根异常。因此开发人员无需担心底层 O/X 映射工具自身的异常层次结构。

马歇尔

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 输出的标记接口。以下是可用的类型 -

  • javax.xml.transform.dom.DOMResult - 表示 org.w3c.dom.Node。

  • javax.xml.transform.sax.SAXResult - 表示 org.xml.sax.ContentHandler。

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

解组器

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

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

其中 source 是表示 XML 输入的标记接口。以下是可用的类型 -

  • javax.xml.transform.dom.DOMSource - 表示 org.w3c.dom.Node。

  • javax.xml.transform.sax.SAXSource - 表示 org.xml.sax.InputSource 和 org.xml.sax.XMLReader。

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