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
packagecom.mdf.springoxm; publicclassCustomer{ privateStringname; privateStringsex; privateBooleanflag; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicStringgetSex(){ returnsex; } publicvoidsetSex(Stringsex){ this.sex=sex; } publicBooleangetFlag(){ returnflag; } publicvoidsetFlag(Booleanflag){ this.flag=flag; } }
xmlDemo.java文件
packagecom.mdf.springoxm; importjava.io.FileInputStream; importjava.io.FileOutputStream; importjava.io.IOException; importjavax.xml.transform.stream.StreamResult; importjavax.xml.transform.stream.StreamSource; importorg.springframework.oxm.Marshaller; importorg.springframework.oxm.Unmarshaller; publicclassoxmDemo{ privateMarshallermarshaller; privateUnmarshallerunmarshaller; publicMarshallergetMarshaller(){ returnmarshaller; } publicvoidsetMarshaller(Marshallermarshaller){ this.marshaller=marshaller; } publicUnmarshallergetUnmarshaller(){ returnunmarshaller; } publicvoidsetUnmarshaller(Unmarshallerunmarshaller){ this.unmarshaller=unmarshaller; } publicvoidconvertFromObjectToXML(Objectobject,Stringfilepath) throwsIOException{ FileOutputStreamos=null; try{ os=newFileOutputStream(filepath); getMarshaller().marshal(object,newStreamResult(os)); } finally{ if(os!=null){ os.close(); } } } publicObjectconvertFromXMLToObject(Stringxmlfile)throwsIOException{ FileInputStreamis=null; try{ is=newFileInputStream(xmlfile); returngetUnmarshaller().unmarshal(newStreamSource(is)); } finally{ if(is!=null){ is.close(); } } } }
测试
importorg.springframework.context.ApplicationContext; importorg.springframework.context.support.ClassPathXmlApplicationContext; importcom.mdf.springoxm.Customer; importcom.mdf.springoxm.oxmDemo; importjava.io.IOException; publicclassMain{ privatestaticfinalStringXML_FILE_NAME="customer.xml"; publicstaticvoidmain(String[]args)throwsIOException{ ApplicationContextappContext=newClassPathXmlApplicationContext("applicationContext.xml"); oxmDemoconverter=(oxmDemo)appContext.getBean("oxmDemo"); Customercustomer=newCustomer(); customer.setName("yiibai"); customer.setFlag(true); customer.setSex("Haikouhaidiandao"); System.out.println("ConvertObjecttoXML!"); //fromobjecttoXMLfile converter.convertFromObjectToXML(customer,XML_FILE_NAME); System.out.println("Done\n"); System.out.println("ConvertXMLbacktoObject!"); //fromXMLtoobject Customercustomer2=(Customer)converter.convertFromXMLToObject(XML_FILE_NAME); System.out.println(customer2); System.out.println("Done"); } }
测试结果:
五月11,20162:27:52下午org.springframework.context.support.ClassPathXmlApplicationContextprepareRefresh 信息:Refreshingorg.springframework.context.support.ClassPathXmlApplicationContext@1221be2:startupdate[WedMay1114:27:51CST2016];rootofcontexthierarchy 五月11,20162:27:52下午org.springframework.beans.factory.xml.XmlBeanDefinitionReaderloadBeanDefinitions 信息:LoadingXMLbeandefinitionsfromclasspathresource[applicationContext.xml] 五月11,20162:27:52下午org.springframework.oxm.castor.CastorMarshallerafterPropertiesSet 信息:Configuredusing[classpathresource[mapping.xml]] ConvertObjecttoXML! Done ConvertXMLbacktoObject! com.mdf.springoxm.Customer@b419da Done
总结
以上就是本文关于Springoxm入门实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!