hessian介绍.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
hessian介绍

Hessian概述Hessian是一个轻量级的remotingonhttp工具,使用简单的方法提供了RMI的功能。相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。Hessian执行流程Hessian一次完整调用Hessian客户端时序HessianProxy是hessian client处理客户端请求的核心类,它采用proxy的设计模式,代理客户端对远程接口的调用,hessian client的主流程的时序图如下所示:Hessian服务器端时序HessianSkeleton是hessian server端的核心类,从输入流中返序列化出客户端调用的方法和参数,对服务端服务进行调用,然后把处理结果返回给客户端,主要流程时序图如下所示:Hessian序列化和反序列化结构类图Serializer ?序列化的接口Deserializer反序列化的接口AbstractHessianInputhessian自定义的输入流,提供对应的read各种类型的方法AbstractHessianOutput ?hessian自定义的输出流,提供对应的write各种类型的方法AbstractSerializerFactory介绍serializerFactory从字面意思上也看的出来,是管理和维护对应序列化/反序列化机制的工厂。默认的几种实现SerializerFactory标准的实现ExtSerializerFactory我们可以设置自定义的序列化机制,通过该Factory可以进行扩展。BeanSerializerFactory对SerializerFactory的默认object的序列化机制进行强制指定,指定为BeanSerializer。SerializerFactory介绍:先看一下hesian提供的Serializer/Derializer几种默认实现实际运行当中使用的UnsafeSerializer和UnsafeDeserializer作为默认实现,在其中会有内部类FieldDeserializer和FieldSerializer来对应的处理对象内部的字段,如果出现Unsafe内部支持的FieldDeserializer实现则会递归的进行对象序列化和反序列化处理。序列化流程根据对象类型获取对应的Serializer实现(默认是UnsafeSerializer类),如果是基本类型直接调用对应Serializer的writeObject方法写入输出流根据对象本地Class反射获取对应的Field,循环Field获取对应FieldSerializer数组并设置到UnsafeSerializer调用UnsafeSerializer写入类的信息,循环对应的FieldSerializer数组进行写入信息(可能存在递归处理)关闭输出流反序列化流程根据输入流里面对象类型获取对应的对象定义ObjectDefinition类的类型获取对应的Serializer实现(默认是UnsafeSerializer类),根据Class反射获取对应Field,循环Field获取对应的FieldDeserializer数组并设置到UnsafeSerializer根据输入流获取对应类的字段数量长度并构建对应的Object数组和String数组;循环此数组去对应类的Serializer中寻找对应的FieldDeserializer,找不到的设置为NullFieldDeserializer,同时根据流获取对应位置的字段名称根据以上信息构建ObjectDefinition对象根据Class和ObjectDefinition创建对象实例循环ObjectDefinition的FieldDeserializer构建对应的Field(此处可能存在递归),调用对象反射注入属性,特别注意的是如果FieldDeserializer是NullFieldDeserializer这个时候是从流里面读取一个对象,但是不会赋值给任何人。测试用例和结果查询返回结果序列化和反序列化1.1本地返回结果对象DTO比服务器的字段少(基本类型或者自定义类型);结果:正常处理1.2本地返回结果对象DTO比服务器的字段多(基本类型或者自定义类型);结果:正常处理,但是本地多出的字段都为null或者基本类型默认值1.3本地枚举类型比服务器枚举类型少值;结果:返回异常1.4本地枚举类型比服务器枚举类型多值;结果:正常处理请求入参序列化和反序列化1.1本地入参param比服务器少字段(基本类型或者自定义类型);结果:正常处理,但是服务器比本地多出来的字段都为null或者基本类型默认值1.2本地入参param比服务器多字段(基本类型或者自定义类型)

文档评论(0)

ipbohn97 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档