Hessian客户端主要是通过proxy代理来实现 当客户端调用远程接口方法时 会被HessianProxy 代理 HessianProxy invoke方法主要做以下工作
1.把调用的 方法名称 参数 序列化
2.通过HttpURLConnection向服务端发送调用请求
3.服务端返回的结果 反序列化
Proxy是由HessianProxyFactory创建
HessianProxyFactory的create方法
- publicObjectcreate(Class<?>api,URLurl,ClassLoaderloader){
- if(api==null)
- thrownewNullPointerException(
- "apimustnotbenullforHessianProxyFactory.create()");
- InvocationHandlerhandler=null;
- handler=newHessianProxy(url,this,api);
- returnProxy.newProxyInstance(loader,newClass[]{api,HessianRemoteObject.class},handler);
- }
当调用远程接口的方法时 会激活HessianProxy代理的invoke方法 invoke方法主要向服务端发送请求 反序列化服务端返回的结果
- publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)
- throwsThrowable{
- StringmangleName;
- synchronized(_mangleMap){
- mangleName=_mangleMap.get(method);
- }
- if(mangleName==null){
- StringmethodName=method.getName();
- Class<?>[]params=method.getParameterTypes();
- if(methodName.equals("equals")&¶ms.length==1
- &¶ms[0].equals(Object.class)){
- Objectvalue=args[0];
- if(value==null||!Proxy.isProxyClass(value.getClass()))
- returnBoolean.FALSE;
- ObjectproxyHandler=Proxy.getInvocationHandler(value);
- if(!(proxyHandlerinstanceofHessianProxy))
- returnBoolean.FALSE;
- HessianProxyhandler=(HessianProxy)proxyHandler;
- returnnewBoolean(_url.equals(handler.getURL()));
- }elseif(methodName.equals("hashCode")&¶ms.length==0)
- returnnewInteger(_url.hashCode());
- elseif(methodName.equals("getHessianType"))
- returnproxy.getClass().getInterfaces()[0].getName();
- elseif(methodName.equals("getHessianURL"))
- return_url.toString();
- elseif(methodName.equals("toString")&¶ms.length==0)
- return"HessianProxy["+_url+"]";
- if(!_factory.isOverloadEnabled())
- mangleName=method.getName();
- else
- mangleName=mangleName(method);
- synchronized(_mangleMap){
- _mangleMap.put(method,mangleName);
- }
- }
- InputStreamis=null;
- HessianConnectionconn=null;
- try{
- conn=sendRequest(mangleName,args);
- is=conn.getInputStream();
- AbstractHessianInputin;
- intmajor=is.read();
- intminor=is.read();
- in=_factory.getHessianInput(is);
- in.startReplyBody();
- Objectvalue=in.readObject(method.getReturnType());
- if(valueinstanceofInputStream){
- value=newResultInputStream(conn,is,in,(InputStream)value);
- is=null;
- conn=null;
- }else
- in.completeReply();
- returnvalue;
- }catch(HessianProtocolExceptione){
- thrownewHessianRuntimeException(e);
- }finally{
- }
- }
sendRequest 方法主要序列化请求信息(方法,参数) 然后向服务端发送请求 HessianConnection包装了HttpURLConnection
- protectedHessianConnectionsendRequest(StringmethodName,Object[]args)
- throwsIOException{
- HessianConnectionconn=null;
- conn=_factory.getConnectionFactory().open(_url);
- booleanisValid=false;
- try{
- addRequestHeaders(conn);
- OutputStreamos=null;
- try{
- os=conn.getOutputStream();
- }catch(Exceptione){
- thrownewHessianRuntimeException(e);
- }
- AbstractHessianOutputout=_factory.getHessianOutput(os);
- out.call(methodName,args);
- out.flush();
- conn.sendRequest();
- isValid=true;
- returnconn;
- }finally{
- if(!isValid&&conn!=null)
- conn.destroy();
- }
- }
本文转自:http://blog.csdn.net/java2000_wl/article/details/7560393
分享到:
相关推荐
hessian-lite-3.2.1-fixed-2.jar
赠送jar包:hessian-3.3.6.jar 赠送原API文档:hessian-3.3.6-javadoc.jar 赠送源代码:hessian-3.3.6-sources.jar 包含翻译后的API文档:hessian-3.3.6-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven...
赠送jar包:hessian-3.3.6.jar; 赠送原API文档:hessian-3.3.6-javadoc.jar; 赠送源代码:hessian-3.3.6-sources.jar; 赠送Maven依赖信息文件:hessian-3.3.6.pom; 包含翻译后的API文档:hessian-3.3.6-javadoc-...
二进制Web服务Hessian刘骥讲座--(附源码) 二进制Web服务Hessian刘骥讲座--(附源码) 二进制Web服务Hessian刘骥讲座--(附源码)
Hessian 框架源码jar包 hessian-4.0.7-src.jar
hessian是一个轻量级的Java Remoting方案
hessian源码
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
Hessian(binary-RPC)相关Jar包资源
java运行依赖jar包
hessian.jarhessian.jarhessian.jarhessian.jarhessian.jarhessian.jarhessian.jar
hessian与flex交互,所以用到的swc包
使用hessian进行服务器和客户端通讯,此案例包括服务器和java客户端,参考博客:http://blog.csdn.net/tan313/article/details/49536163
python的hession库,可以用这个库进行python自动化,进行代理、解析、序列化反序列化,不用自己编写代码,直接安装就好了。python如何安装.whl文件请自行百度
赠送jar包:hessian-4.0.63.jar; 赠送原API文档:hessian-4.0.63-javadoc.jar; 赠送源代码:hessian-4.0.63-sources.jar; 赠送Maven依赖信息文件:hessian-4.0.63.pom; 包含翻译后的API文档:hessian-4.0.63-...
很好用的JAVA工具
java运行依赖jar包
java运行依赖jar包