Spring中oxm入门的示例分析

这篇文章主要介绍了Spring中oxm入门的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

公司主营业务:成都做网站、成都网站制作、成都外贸网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出鄄城免费做网站回馈大家。

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配置文件

 
  
   
     
     
   
   
   
      
   

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

mapping.xml文件

 
     
  
       
  
       
        
       
        
       
        
       
  
       
        
       
     

自定义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中oxm入门的示例分析
网页链接:http://csdahua.cn/article/phohig.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流