使用oxm映射xml的实现步奏

这次给大家带来使用oxm映射xml的实现步奏,使用oxm映射xml的注意事项有哪些,下面就是实战案例,一起来看一下。

认识XML解析技术

XML相关概念

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

(2)XML是SOA的基础。

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等。

XStream概述

(1)XStream是一套简洁易用的开源框架,用于将Java对象序列化为XML,或者将XML反序列化为Java对象。

(2)XStream架构组成:

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

IO(输入/输出):XStream是通过HierarchicalStreamWriter和HierarchicalStreamReader从底层XML数据中抽象而来,分别用于序列化和反序列化操作。

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

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

快速入门

(1)创建一个XStream,并指定XML解析器

XStreamxstream=newXStream(newDomDriver());

如果不指定解析器,XStream会默认采用XPP(XMLPullParser)解析器,XPP是一种高速解析器。

(2)示例如下:

使用XStream别名

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

XStream有3种别名配置情况:

类别名:用alias(Stringname,Classtype)。

类成员别名:用aliasField(Stringalias,ClassdefinedIn,StringfieldName)。

类成员作为属性别名:用aliasAttribute(ClassdefinedIn,StringattributeName,Stringalias),单独命名没有意义,还要通过useAttributeFor(ClassdefinedIn,StringfieldName)应用到某个类上。

XStream转换器

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

XStream注解

XStreamxstream=newXStream(newDomDriver());

加载对象有2种方式:

①方式一:

xstream.processAnnotations(AAA.class);

xstream.processAnnotations(BBB.class);

②方式二:

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

流化对象

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

使用PrettyWriter和CompactWriter的区别就在于PrettyWriter会格式化生成的XML,而CompactWriter会压缩生成的XML。

持久化API

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

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

处理JSON

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

(2)XStream提供了JettisonMappedXmlDriver和JsonHierarchicalStreamDriver来完成java对象和json的转换工作。

(3)JettisonMappedXmlDriver和JsonHierarchicalStreamDriver的区别:

①JettisonMappedXmlDriver生成的是压缩的JSON,而JsonHierarchicalStreamDriver生成的是格式化的JSON。

②要想将JSON转换为对象,只能使用JettisonMappedXmlDriver。

与SpringOXM整合

SpringOXM概述

SpringOXM对主流O/XMapping框架做了一个统一的抽象和封装,Marshaller和Unmarshaller是SpringOXM两个核心接口。Marshaller用于将对象转成XML,Unmarshaller用于将XML转成对象。

小结

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

根据XML文档生成Java语言代码(如JAXB、XMLBeans、Castor)。

使用某种形式的映射绑定方法,也就是设定Java类如何与XML进行关联(如XStream、Castor、JiBX)。

(2)2种方式比较:

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

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

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

Swiper实现移动端广告图片轮播

vue+swiper如何实现侧边栏菜单

以上就是使用oxm映射xml的实现步奏的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2772907.html

(0)
上一篇 2025年3月8日 13:34:56
下一篇 2025年3月8日 13:35:02

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue实现键盘效果

    这次给大家带来vue实现键盘效果,vue实现键盘效果的注意事项有哪些,下面就是实战案例,一起来看一下。 常看到各种app应用中使用自定义的键盘,本例子中使用vue2实现个简单的键盘,支持在移动端和PC端使用 Keyboard.vue 123…

    编程技术 2025年3月8日
    200
  • React-Native+Mobx实现商城APP

    这次给大家带来React-Native+Mobx实现商城APP,React-Native+Mobx实现商城APP的注意事项有哪些,下面就是实战案例,一起来看一下。 最近一直在学习微信小程序,在学习过程中,看到了 wxapp-mall 这个微…

    编程技术 2025年3月8日
    200
  • zTree的树形菜单使用步奏详解

    这次给大家带来zTree的树形菜单使用步奏详解,zTree树形菜单使用的注意事项有哪些,下面就是实战案例,一起来看一下。 在每个节点添加 id 和 pid, id 表示当前节点编号,pid 表示父节点编号 第一步:在页面显示菜单位置,添加 …

    编程技术 2025年3月8日
    200
  • springmvc实现注解拦截器

    这次给大家带来springmvc实现注解拦截器,springmvc实现注解拦截器的注意事项有哪些,下面就是实战案例,一起来看一下。 最近在用SpringMvc写项目的时候,遇到一个问题,就是方法的鉴权问题,这个问题弄了一天了终于解决了,下面…

    编程技术 2025年3月8日
    200
  • JS的一些隐式转换使用总结

    这次给大家带来JS的一些隐式转换使用总结,使用JS隐式转换的注意事项有哪些,下面就是实战案例,一起来看一下。 js中的不同的数据类型之间的比较转换规则如下: 1. 对象和布尔值比较 对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数…

    编程技术 2025年3月8日
    200
  • JS如何实现Ajax的请求函数

    这次给大家带来JS如何实现Ajax的请求函数,JS实现Ajax请求函数的注意事项有哪些,下面就是实战案例,一起来看一下。 一般我们写网页的时候,如果用到 Ajax 请求服务器,都是使用 JQuery 等已经封装好的库来调用,比较简单。 但是…

    编程技术 2025年3月8日
    200
  • Angular验证功能实现步奏

    这次给大家带来Angular验证功能实现步奏,Angular验证功能实现的注意事项有哪些,下面就是实战案例,一起来看一下。 完整实例代码如下: angular验证功能 input{ display: block; } ul li{ colo…

    编程技术 2025年3月8日
    200
  • element-ui实现导入导出

    这次给大家带来element-ui实现导入导出,element-ui实现导入导出的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 众所周知,ElementUI,是一个比较完善的UI库,但是使用它需要有一点vue的基础。在开始本文的正…

    编程技术 2025年3月8日
    200
  • keep-alive在vue2中应该怎样使用

    这次给大家带来keep-alive在vue2中应该怎样使用,keep-alive在vue2中使用的注意事项有哪些,下面就是实战案例,一起来看一下。 keep-alive 是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染…

    编程技术 2025年3月8日
    200
  • 一个单独页面内如何实现两个zTree联动

    这次给大家带来一个单独页面内如何实现两个zTree联动,一个单独页面内实现两个zTree联动的注意事项有哪些,下面就是实战案例,一起来看一下。 简介 zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论