`
wangxuliangboy
  • 浏览: 210708 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Hessian中同名方法调用的重载问题

阅读更多

 

关于Hessian中同名方法调用的重载问题

接口中的方法签名:
 public void test(Long i);
 public void test(String i);


获取方法名:
  if (! _factory.isOverloadEnabled())
 mangleName = method.getName();
      else
        mangleName = mangleName(method);
发送http请求:
   conn = sendRequest(mangleName, args);

 

//hessian自己的流输出对象

AbstractHessianOutput out = _factory.getHessianOutput(os);

      out.call(methodName, args);
      out.flush();

//call方法,序列化参数

 if (args != null) {
      for (int i = 0; i < args.length; i++)
        writeObject(args[i]);
    }

 

当设置_factory.isOverloadEnabled()为false的时候,会直接获取方法名
如果设置为true的时候,会去调用AbstractSkeleton.mangleName(method, false);

方法内做法是将方法名连接方法参数类型,来唯一确认一个方法答名
Class []params = method.getParameterTypes();
    for (int i = 0; i < params.length; i++) {
      sb.append('_');
      sb.append(mangleClass(params[i], isFull));
    }


HessianSkeleton的调用方法处理方式:
String methodName = in.readMethod();
Method method = getMethod(methodName);

是通过发送的请求字节来反序列话的。sendRequest(mangleName, args);也就是mangleName

 

 

HessianProxyFactory.setOverloadEnabled(true)
当你的方法有重载的话。应该选择将isOverloadEnabled设置为true。这样的话就不会造成
方法调用错误的情况

 

 

 

 

Hessian http 411

问题描述:用Hessian实现web service过程中,需要创建对象时,是使用HTTP POST方法来传递数据的。但是在有反向代理的情况
下,会抛出异常(com.caucho.hessian.client.HessianConnectionException: 411:
java.io.IOException: Server returned HTTP response code: 411 for URL:
http://xxxx/xxx/xxxService)。

首先来看下HTTP 411错误的解释: Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)这是因为Hessian与服务端通信默认是采取分块的方式发送数据,而
反向代理要获得Content-Length这个头,才能处理请求,但是Hessian的请求中并没有加入这个参数。

解决方法:
com.caucho.hessian.client.HessianProxyFactory类中,有一个boolean
_chunckedPost的域成员,其默认值为true。这个值就是规定Hessian是否以分块发送的方式与服务端交换数据的参数,因此在创建
com.caucho.hessian.client.HessianProxyFactory的对象后(假设为factory),只要调用其上的
setChunckedPost()方法,把这个属性设置为false即可。即factory.setChunkedPost(false);

2
0
分享到:
评论

相关推荐

    hessian实现远程调用

    HessianServlet会自动处理HTTP请求,并将方法调用转发到对应的实现类。 4. **客户端调用**: - 客户端通过HTTP请求访问服务端的URL,Hessian库会自动处理网络通信和序列化/反序列化过程。客户端代码无需关心具体的...

    用hessian c#桌面程序调用J2EE后台服务

    Hessian基于HTTP,它将方法调用序列化为二进制格式,以减少网络传输的数据量,提高通信效率。在C#客户端,我们可以使用开源库如Hessian.NET来实现Hessian协议的支持。 步骤一:配置J2EE服务端 在J2EE后台服务端,你...

    Hessian Binary Web Service Protocol远程接口调用入门Demo

    Hessian由Caucho Technology公司开发,旨在解决XML-RPC在数据传输中的低效问题。本教程将通过一个入门Demo来介绍如何使用Hessian进行远程接口调用。 首先,让我们理解Hessian的优势。与XML-RPC相比,Hessian使用二...

    Hessian远程调用框架学习一

    Hessian远程调用框架是基于Java的轻量级RPC(Remote Procedure Call)解决方案,它允许开发者在分布式系统中实现高效、便捷的跨网络对象方法调用。本教程将引导你入门Hessian,通过一个简单的JAVA demo来理解其工作...

    Hessian调用

    在IT行业中,Hessian是一种基于二进制协议的远程方法调用(RMI)框架,它由Caucho Technology开发并维护。Hessian的目标是提供高效、简单的方式进行跨语言、跨平台的服务调用,尤其适合Java和Adobe Flex之间的通信。在...

    Spring中集成Hessian的问题

    在Spring框架中集成Hessian是为了实现远程方法调用(Remote Method Invocation, RMI),这是一种轻量级的序列化协议,可以高效地传输Java对象。Hessian使得服务提供者和服务消费者之间能够通过网络进行快速的数据...

    hessian demo 包括服务端和客户端

    Hessian是一种高效的RPC(Remote Procedure Call)协议,它允许Java应用程序之间进行远程方法调用,类似于RMI(Remote Method Invocation)。Hessian由Caucho公司开发,它的主要优点在于序列化效率高,能够将Java...

    hessian-4.0.33.jar

    在这个专题中,我们将以hessian-4.0.33.jar为例,详细探讨Hessian框架的核心特性和使用方法。 一、Hessian协议简介 Hessian协议基于HTTP协议,但其数据传输采用二进制格式,这使得它在数据传输效率上远超基于文本...

    hessian 服务器之间的调用demo

    Hessian是一个由Caucho Technology开发的轻量级二进制RPC协议。本人做了一个简单的应用,大家可以往更深的方向研究,共同进步,msn:yang-yang-90@hotmail.com

    hessian php与java通讯demo源码

    Hessian是一种二进制协议,它允许在不同的编程语言之间进行高效的远程方法调用(RPC)。这个"PHP与Java通信Demo源码"是基于Hessian协议实现的一个示例,展示了如何在PHP和Java之间建立通信。现在,我们将深入探讨...

    Hessian

    Hessian是一种二进制Web服务协议,它由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation,RMI)服务。Hessian的目标是简化分布式系统之间的通信,通过减少网络传输的...

    Hessian远程调用RPC最简单demo

    Hessian是Apache软件基金会的Caucho项目开发的一个开源RPC框架,它支持二进制协议,能够高效地进行远程方法调用。本教程将详细介绍"Hessian远程调用RPC最简单demo",包括服务器端服务发布和客户端服务调用的实现,...

    Hessian协议格式

    在示例代码中,我们将通过 Hessian protocol 调用这四个方法,并截取并分析请求报文和应答报文的格式。 2.1 Hessian 报文结构应用示例背景说明 在示例代码中,我们使用 Java 语言编写了一个简单的示例,用于形象地...

    Hessian案列代码

    - 在Hessian中,对象会被转换成二进制流,然后在网络上传输。这个过程叫做序列化。 - 当二进制流到达目的地时,Hessian会将其还原为原始的对象,这个过程叫做反序列化。 4. **安全性与性能优化**: - 虽然...

    hessian案例,hessian案例

    Hessian支持RPC模式,允许服务端和客户端之间进行方法调用。 2. **Java中的Hessian**:在Java中,Caucho提供了Hessian库,可以方便地在服务器和客户端之间建立Hessian服务。通过简单的API,开发者可以轻松地创建...

    hessian

    Hessian是一种二进制Web服务协议,由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation, RMI)机制。它结合了HTTP协议的可扩展性和Java序列化机制的易用性,使得在...

    hessian框架应用,实现远程调用,分布式开发

    Hessian框架是一款轻量级的Java远程方法调用(Remote Method Invocation, RMI)框架,由Caucho Technology公司开发。它主要应用于分布式系统中,允许应用程序通过HTTP协议进行高效、透明的远程调用,降低了分布式...

    hessian使用小例子

    在IT行业中,Hessian是一种轻量级的二进制序列化协议,主要用于远程方法调用(RMI)和Web服务。Hessian由Caucho Technology开发,它的设计目标是提供比XML更快、更简洁的数据传输方式,从而提高网络通信效率。在Java...

Global site tag (gtag.js) - Google Analytics