使用Hessian调用重载方法报异常问题,例如:
String SayHello();
String SayHello(String name);
客户端调用上面的方法:
IHello hello = (IHello) hessianProxyFactory.create(IHello.class, url);
String result = hello.SayHello();
log.info("ClientTest1 返回结果:"+result);
result = hello.SayHello("tom");
log.info("返回结果:"+result);
调用第一个方法是ok,调用第二个方法后会报异常:
org.springframework.web.util.NestedServletException: Hessian skeleton invocation failed; nested exception is com.caucho.hessian.io.HessianProtocolException:
.......
Caused by: com.caucho.hessian.io.HessianProtocolException: SayHello: expected end of call ('z') at 0x53 (S).
.....
com.caucho.hessian.client.HessianRuntimeException: com.caucho.hessian.io.HessianProtocolException:
.......
解决方法:
方法I、在调用方法前加上下面的设置
//设置是否允许重载方法(true:是,会以方法名和参数类型来唯一确定要远程调用的方法,默认为false 以方法名来确定远程调用的方法,以第一个方法名为准 )
hessianProxyFactory.setOverloadEnabled(true);
方法II、
在客户端的配置文件中加入:
<!-- 解决hessian 方法重载问题 -->
<property name="overloadEnabled" value="true"></property>