O/XMapper是什么?

Spring3.0的一个新特性是O/XMapper。O/X映射器这个概念并不新鲜,O代表Object,X代表XML。它的目的是在Java对象(几乎总是一个plainoldJavaobject,或简写为POJO)和XML文档之间来回转换。

例如,您可能有一个带有几个属性的简单bean,且您的业务需要将那个Java对象转换为一个XML文档。Spring的O/XMapper能够为您解决那个问题。如果反过来,您需要将一个XML文档转换为一个简单Javabean,Spring的O/XMapper也能胜任。

有一点需要注意:SpringO/XMapper只是定义由流行的第三方框架实现的统一的界面。要利用Spring的O/X功能,您需要一个在Java对象和XML之间来回转换的实用程序。Castor就是这样一个流行的第三方工具,本文将使用这个工具。其他这样的工具包括XMLBeans、JavaArchitectureforXMLBinding(JAXB)、JiBX和XStream。

编组和解组

进行O/X映射时,您经常会看到编组(marshalling)和解组(unmarshalling)这两个术语。

编组指将Javabean转换成XML文档的过程,这意味着Javabean的所有字段和字段值都将作为XML元素或属性填充到XML文件中。有时,编组也称为序列化(serializing)。

如您所料,解组是与编组完全相反的过程,即将XML文档转换为Javabean,这意味着XML文档的所有元素或属性都作为Java字段填充到Javabean中。有时,解组也称为反序列化(deserializing)。

使用Spring的O/XMapper的好处

使用Spring的O/XMapper的一个最直接的好处是可以通过利用Spring框架的其他特性简化配置。Spring的bean库支持将实例化的O/X编组器注入(即前面提到过的“依赖项注入”)使用那些编组器的对象。重申一遍,这将加快应用程序开发和部署。

遵循坚实的面向对象的设计实践,SpringO/X框架只定义两个接口:Marshaller和Unmarshaller,它们用于执行O/X功能,这是使用这个框架的另一个重大好处。这些接口的实现完全对独立开发人员开放,开发人员可以轻松切换它们而无需修改代码。例如,如果您一开始使用Castor进行O/X转换,但后来发现它缺乏您需要的某个功能,这时您可以切换到XMLBeans而无需任何代码更改。唯一需要做的就是更改Spring配置文件以使用新的O/X框架。

使用Spring的O/XMapper的另一个好处是统一的异常层次结构。Spring框架遵循使用它的数据访问模块建立的模式,方法是将原始异常对象包装到Spring自身专为O/XMapper建立的运行时异常中。由于第三方提供商抛出的原始异常被包装到Spring运行时异常中,您能够查明出现异常的根本原因。您也不必费心修改代码以捕获异常,因为异常已包装到一个运行时异常中。以下几个运行时异常扩展了基础异常XMLMappingException:GenericMarshallingFailureException、ValidationFailureException、MarshallingFailureException和UnmarshallingFailureException。

入门栗子

配置清单:

applicationContext.xmlSpring配置文件

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="oxmDemo" class="com.mdf.springoxm.oxmDemo"> <property name="marshaller" ref="castorMarshaller" /> <property name="unmarshaller" ref="castorMarshaller" /> </bean> <!-- 引入castor包:castor-1.3.2-core.jar,castor-1.3.2-xml.jar --> <bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller"> <property name="mappingLocation" value="classpath:mapping.xml" /> </bean>
</beans> 

编组和解组时,套用的mapping格式,在进行解组的时候,必须使用mapping才能成功(这里存在疑问,不知道是否因为自己写法问题,只能通过mapping进行格式编码才能进行解组,否则报出无法找到rootelement的错误)。

mapping.xml文件

<mapping> <class name="com.mdf.springoxm.Customer"> <map-to xml="Customer"/> <field name="flag" type="boolean"> <bind-xml name="flag" node="element"/> </field> <field name="name" type="string"> <bind-xml name="name" node="element"/> </field> <field name="sex" type="string"> <bind-xml name="sex" node="element"/> </field> </class>
</mapping> 

自定义Bean文件

Customer.java

package com.mdf.springoxm;
public class Customer {private String name;private String sex;private Boolean flag;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Boolean getFlag() {return flag;}public void setFlag(Boolean flag) {this.flag = flag;}
}

xmlDemo.java文件

package com.mdf.springoxm;
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.oxm.Marshaller;
import org.springframework.oxm.Unmarshaller;
public class oxmDemo{private Marshaller marshaller;private Unmarshaller unmarshaller;public Marshaller getMarshaller() {return marshaller;}public void setMarshaller(Marshaller marshaller) {this.marshaller = marshaller;}public Unmarshaller getUnmarshaller() {return unmarshaller;}public void setUnmarshaller(Unmarshaller unmarshaller) {this.unmarshaller = unmarshaller;}public void convertFromObjectToXML(Object object, String filepath) throws IOException {FileOutputStream os = null;try {os = new FileOutputStream(filepath);getMarshaller().marshal(object, new StreamResult(os));}finally {if (os != null) {os.close();}}}public Object convertFromXMLToObject(String xmlfile) throws IOException {FileInputStream is = null;try {is = new FileInputStream(xmlfile);return getUnmarshaller().unmarshal(new StreamSource(is));}finally {if (is != null) {is.close();}}}
}

测试

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.mdf.springoxm.Customer;
import com.mdf.springoxm.oxmDemo;
import java.io.IOException;
public class Main {private static final String XML_FILE_NAME = "customer.xml";public static void main(String[] args) throws IOException {ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");oxmDemo converter = (oxmDemo) appContext.getBean("oxmDemo");Customer customer = new Customer();customer.setName("yiibai");customer.setFlag(true);customer.setSex("Haikou haidiandao");System.out.println("Convert Object to XML!");//from object to XML file converter.convertFromObjectToXML(customer, XML_FILE_NAME);System.out.println("Done \n");System.out.println("Convert XML back to Object!");//from XML to object Customer customer2 = (Customer)converter.convertFromXMLToObject(XML_FILE_NAME);System.out.println(customer2);System.out.println("Done");}
}

测试结果:

五月 11, 2016 2:27:52 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1221be2: startup date [Wed May 11 14:27:51 CST 2016]; root of context hierarchy
五月 11, 2016 2:27:52 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext.xml]
五月 11, 2016 2:27:52 下午 org.springframework.oxm.castor.CastorMarshaller afterPropertiesSet
信息: Configured using [class path resource [mapping.xml]]
Convert Object to XML!
Done  Convert XML back to Object!
com.mdf.springoxm.Customer@b419da
Done 

总结

以上就是本文关于Spring oxm入门实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • Spring自动装配与扫描注解代码详解
  • Spring MVC参数传递中文乱码解决方法分享
  • springmvc和js前端的数据传递和接收方式(两种)
  • spring security自定义认证登录的全过程记录
  • 详解Springboot事务管理
  • spring mvc实现文件上传与下载功能
  • spring Boot打包部署到远程服务器的tomcat中
  • SpringBoot 监控管理模块actuator没有权限的问题解决方法

Spring oxm入门实例相关推荐

  1. java oxm_Spring oxm入门实例

    o/xmapper是什么? spring3.0的一个新特性是o/xmapper.o/x映射器这个概念并不新鲜,o代表object,x代表xml.它的目的是在java对象(几乎总是一个plainoldj ...

  2. 【Spring】Spring oxm 入门初尝试

    O/X Mapper 是什么? Spring 3.0 的一个新特性是 O/X Mapper.O/X 映射器这个概念并不新鲜,O 代表 Object,X 代表 XML.它的目的是在 Java 对象(几乎 ...

  3. Spring oxm 入门

    oxm : 是spring 3.0的一个新特性 o/xMapping 什么是o/xMapping?             o/x mapping 入门:                     功能 ...

  4. IDEA Spring框架入门实例

    IDEA创建Spring实例比较简单, 1.直接选择创建Spring项目即可,会自动下载所需包. 2.src下创建所需文件 1.Person类 package com.bird.service;imp ...

  5. Spring简单入门实例

    前言 这一篇只是简单感受一下Spring MVC. 环境和jar包准备 1.  IDE- eclipse3.7 2. Spring 下载地址: ▪Spring3.2.3  -- http://repo ...

  6. Eclipse环境下 spring MVC 入门实例

    实现一个spring 的登陆事例 1.在eclipse下新建动态网页工程springmvc  2.需要导入jar包.     aopalliance.jar;commons-beanutils.jar ...

  7. Spring AOP原理浅析及入门实例

    上篇问题及Spring AOP实现原理浅析 上篇说了一个AOP编程问题,那是一个错误的AOP案例.它的错误在A类中,再次粘贴A类代码: @Componentpublic class AImpl imp ...

  8. Spring MVC + Spring + Hibernate + mysql 注册登陆入门实例

    Spring MVC + Spring + Hibernate + mysql 注册登陆入门实例 (1) 结构 (说明目的是要做在线聊天室的,也包含登陆注册部分,先用这部分做个例子)开发环境用的是ST ...

  9. 【转】最详细的Log4J使用教程一、入门实例二、Log4J基本使用方法三、Spring中使用Log4J四、实战经验总结

    原文地址:http://www.codeceo.com/article/log4j-usage.html 日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供 ...

最新文章

  1. HR问:“你能熬夜吗?”,你会如何回答?
  2. Xcode 真机沙盒
  3. vector 和 list 的区别,应用
  4. 合理支配“财富”:经理人运用时间的12种典型模式
  5. IntentService用法
  6. 关于脚本log返回乱码解决方法
  7. mysql 授权 函数查询_第6篇 MySQL 查询中的数学函数
  8. android音频采集时延,有关音视频采样率帧率以及 Duration 的那些事
  9. 子级Repeater获取 父级Repeater 中的值
  10. 神器webssh学习笔记
  11. 大学英语2 unit4 第五题
  12. redis主从故障自动切换IP漂移
  13. matlab插值函数的作用,matlab 插值函数
  14. Untracked Files Prevent Checkout
  15. 2022百度大数据开发工程师实习面试经历
  16. 今日新闻快讯摘要十条
  17. linux 关闭系统中多余的服务
  18. 组件的生命周期,小程序如何引入第三方ui框架
  19. 在 unity中可以使用的直接设置音量大小的方法
  20. Jenkins在搭建过程中遇到的一些问题

热门文章

  1. 微软发布全新的编程语言Bosque
  2. 七月在线 金融风控系统实战
  3. 如何用Python实现打飞机,让子弹飞吧!
  4. (评)海通证券涉猎信托业_拟投百瑞信托
  5. 应该如何表达愤怒呢?
  6. 戴尔小企业月狂送3重福利!戴尔商用电脑低至4.9折起!
  7. 基于 Spring Boot 2.0 的微服务实战项目
  8. QML 实现九宫格图案解锁
  9. IOS获取下个月最后一天
  10. 54家中国企业进入2010年世界500强排行