关于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);
分享到:
相关推荐
HessianServlet会自动处理HTTP请求,并将方法调用转发到对应的实现类。 4. **客户端调用**: - 客户端通过HTTP请求访问服务端的URL,Hessian库会自动处理网络通信和序列化/反序列化过程。客户端代码无需关心具体的...
Hessian基于HTTP,它将方法调用序列化为二进制格式,以减少网络传输的数据量,提高通信效率。在C#客户端,我们可以使用开源库如Hessian.NET来实现Hessian协议的支持。 步骤一:配置J2EE服务端 在J2EE后台服务端,你...
Hessian由Caucho Technology公司开发,旨在解决XML-RPC在数据传输中的低效问题。本教程将通过一个入门Demo来介绍如何使用Hessian进行远程接口调用。 首先,让我们理解Hessian的优势。与XML-RPC相比,Hessian使用二...
Hessian远程调用框架是基于Java的轻量级RPC(Remote Procedure Call)解决方案,它允许开发者在分布式系统中实现高效、便捷的跨网络对象方法调用。本教程将引导你入门Hessian,通过一个简单的JAVA demo来理解其工作...
在IT行业中,Hessian是一种基于二进制协议的远程方法调用(RMI)框架,它由Caucho Technology开发并维护。Hessian的目标是提供高效、简单的方式进行跨语言、跨平台的服务调用,尤其适合Java和Adobe Flex之间的通信。在...
在Spring框架中集成Hessian是为了实现远程方法调用(Remote Method Invocation, RMI),这是一种轻量级的序列化协议,可以高效地传输Java对象。Hessian使得服务提供者和服务消费者之间能够通过网络进行快速的数据...
Hessian是一种高效的RPC(Remote Procedure Call)协议,它允许Java应用程序之间进行远程方法调用,类似于RMI(Remote Method Invocation)。Hessian由Caucho公司开发,它的主要优点在于序列化效率高,能够将Java...
在这个专题中,我们将以hessian-4.0.33.jar为例,详细探讨Hessian框架的核心特性和使用方法。 一、Hessian协议简介 Hessian协议基于HTTP协议,但其数据传输采用二进制格式,这使得它在数据传输效率上远超基于文本...
Hessian是一个由Caucho Technology开发的轻量级二进制RPC协议。本人做了一个简单的应用,大家可以往更深的方向研究,共同进步,msn:yang-yang-90@hotmail.com
Hessian是一种二进制协议,它允许在不同的编程语言之间进行高效的远程方法调用(RPC)。这个"PHP与Java通信Demo源码"是基于Hessian协议实现的一个示例,展示了如何在PHP和Java之间建立通信。现在,我们将深入探讨...
Hessian是一种二进制Web服务协议,它由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation,RMI)服务。Hessian的目标是简化分布式系统之间的通信,通过减少网络传输的...
Hessian是Apache软件基金会的Caucho项目开发的一个开源RPC框架,它支持二进制协议,能够高效地进行远程方法调用。本教程将详细介绍"Hessian远程调用RPC最简单demo",包括服务器端服务发布和客户端服务调用的实现,...
在示例代码中,我们将通过 Hessian protocol 调用这四个方法,并截取并分析请求报文和应答报文的格式。 2.1 Hessian 报文结构应用示例背景说明 在示例代码中,我们使用 Java 语言编写了一个简单的示例,用于形象地...
- 在Hessian中,对象会被转换成二进制流,然后在网络上传输。这个过程叫做序列化。 - 当二进制流到达目的地时,Hessian会将其还原为原始的对象,这个过程叫做反序列化。 4. **安全性与性能优化**: - 虽然...
Hessian支持RPC模式,允许服务端和客户端之间进行方法调用。 2. **Java中的Hessian**:在Java中,Caucho提供了Hessian库,可以方便地在服务器和客户端之间建立Hessian服务。通过简单的API,开发者可以轻松地创建...
Hessian是一种二进制Web服务协议,由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation, RMI)机制。它结合了HTTP协议的可扩展性和Java序列化机制的易用性,使得在...
Hessian框架是一款轻量级的Java远程方法调用(Remote Method Invocation, RMI)框架,由Caucho Technology公司开发。它主要应用于分布式系统中,允许应用程序通过HTTP协议进行高效、透明的远程调用,降低了分布式...
在IT行业中,Hessian是一种轻量级的二进制序列化协议,主要用于远程方法调用(RMI)和Web服务。Hessian由Caucho Technology开发,它的设计目标是提供比XML更快、更简洁的数据传输方式,从而提高网络通信效率。在Java...