服务器之家

服务器之家 > 正文

spring使用OXM进行对象XML映射解析

时间:2021-03-12 14:27     来源/作者:末日流云18

1、认识xml解析技术

1.1、xml相关概念

(1)dtd:xml语法规则,是xml文件的验证机制,可以通过比较xml文档和dtd文件看文档是否符合规范,元素和标签是否使用正确。

(2)xml是soa的基础。

1.2、xml处理技术

(1)为了使用xml,我们需要通过xml处理器或xmlapi来访问数据,目前jaxp提供了2种处理xml的方法:dom和sax。

①dom:dom通过编程方式对xml文档中数据及结构进行访问,基于xml文档在内存中的树状结构。其缺点是将整个xml文档装入内存需要很大开销。

②sax:基于事件驱动,用到一段解析一段,解决了dom占用内存大的问题,但其缺点是无法随机访问文档。

(2)为了解决dom和sax的问题,一种基于流的streamapiforxml(简称stax)出现了,目前已加入到jdk6的jaxp1.4里面,stax也是基于事件驱动。

(3)dom、sax和stax都是从文档结构出发处理xml的,但很多应用程序仅仅关注文档数据本身,所以xml数据绑定技术应运而生。

数据绑定:是指将数据从存储媒介(xml文档和数据库中)抽取出来,并通过程序表示这些数据的过程,即把数据绑定到虚拟机能够理解并且可以操作的某种内存结构中。

xml绑定框架:castor,jaxb,jibx,quick,zeus等。

2、xml处理利器:xstream

2.1、xstream概述

(1)xstream是一套简洁易用的开源框架,用于将java对象序列化为xml,或者将xml反序列化为java对象。xstream主要特点:

spring使用OXM进行对象XML映射解析

(2)xstream架构组成:

converters(转换器):当xstream遇到需要转换的对象时,它会委派给合适的转换器实现。

io(输入/输出):xstream是通过hierarchicalstreamwriter和hierarchicalstreamreader从底层xml数据中抽象而来,分别用于序列化和反序列化操作。

context(上下文):xstream序列化反序列化对象时会创建2个类marshallingcontext和unmarshallingcontext,由塔门来处理数据并委派给合适的转换器。

facade(统一入口):将上面的3点集成在一起,以统一的接口开放给用户使用。

2.2、快速入门

(1)创建一个xstream,并指定xml解析器

xstreamxstream=newxstream(newdomdriver());

如果不指定解析器,xstream会默认采用xpp(xmlpullparser)解析器,xpp是一种高速解析器。

(2)示例如下:

spring使用OXM进行对象XML映射解析

2.3、使用xstream别名

(1)在上面的示例中,java对象的全类名对应xml文件的根元素,属性名对应xml文件的节点元素,但在实际情况中,java对象和xml对象可能都已经定义好了名字,这时就需要使用别名映射

xstream有3种别名配置情况:

类别名:用alias(stringname,classtype)。

类成员别名:用aliasfield(stringalias,classdefinedin,stringfieldname)。

类成员作为属性别名:用aliasattribute(classdefinedin,stringattributename,stringalias),单独命名没有意义,还要通过useattributefor(classdefinedin,stringfieldname)应用到某个类上。

(2)通过别名修改2.2中示例:

spring使用OXM进行对象XML映射解析

2.4、xstream转换器

在开发过程中,有时候需要转换一些自定义的类型,只要实现converter接口,并调用xstream的registerconverter()方法注册转换器就可以。

2.5、xstream注解

(1)xstream常用注解如下:

spring使用OXM进行对象XML映射解析

(2)使用

xstreamxstream=newxstream(newdomdriver());

加载对象有2种方式:

①方式一:

xstream.processannotations(aaa.class);

xstream.processannotations(bbb.class);

②方式二:

xstream.autodetectannotations(true);//自动加载注解bean,而且还缓存了标注的对象

2.6、流化对象

(1)xstream为objectinputstream和objectoutputstream提供了替代实现,允许以对象流的方式进行xml序列化或反序列化操作。前面是基于dom的xml解析器读取的xml,这里我们显然应该使用流的方式进行解析。

示例如下:

spring使用OXM进行对象XML映射解析

(2)使用prettywriter和compactwriter的区别就在于prettywriter会格式化生成的xml,而compactwriter会压缩生成的xml。

2.7、持久化api

(1)xstream提供了一套简单的方式,可以将集合中的对象持久化到文件中,如:xmlarraylist、xmlset、xmlmap等。

(2)在创建集合之前,还需要指定一个持久化策略persistencestrategy。

2.8、处理json

(1)xml在webservice中有不可动摇的地位,但是在大多数web应用中,还是多采用轻量级的json作为数据交换格式。

(2)xstream提供了jettisonmappedxmldriver和jsonhierarchicalstreamdriver来完成java对象和json的转换工作。

示例如下:

spring使用OXM进行对象XML映射解析

(3)jettisonmappedxmldriver和jsonhierarchicalstreamdriver的区别:

①jettisonmappedxmldriver生成的是压缩的json,而jsonhierarchicalstreamdriver生成的是格式化的json。

②要想将json转换为对象,只能使用jettisonmappedxmldriver。

3、其他常见的o/xmapping开源项目

jaxb、xmlbeans、cstor、jibx的比较:

spring使用OXM进行对象XML映射解析

spring使用OXM进行对象XML映射解析

4、与springoxm整合

4.1、springoxm概述

(1)springoxm对主流o/xmapping框架做了一个统一的抽象和封装,marshaller和unmarshaller是springoxm两个核心接口。marshaller用于将对象转成xml,unmarshaller用于将xml转成对象。

(2)各o/xmapping组件包装器如下:

spring使用OXM进行对象XML映射解析

4.2、在spring中进行配置

(1)xstreammarshaller配置实例:

spring使用OXM进行对象XML映射解析

5、小结

(1)java应用程序的xml数据绑定可以归纳为2种方式:

根据xml文档生成java语言代码(如jaxb、xmlbeans、castor)。

使用某种形式的映射绑定方法,也就是设定java类如何与xml进行关联(如xstream、castor、jibx)。

(2)2种方式比较:

使用由schema或dtd定义的稳定文档结构,并且该结构适合应用程序的需要,则代码生成方法可能是最佳选择。

如果使用现有的java类,或者希望使用类的结构,该结构反映应用程序对数据的用法,而不是xml结构,则映射方法是最佳选择。

总结

以上就是本文关于spring使用oxm进行对象xml映射解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

原文链接:http://blog.csdn.net/qq_29583513/article/details/52524617

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部