解決Hessian呼叫過載方法報錯問題
阿新 • • 發佈:2019-01-28
使用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>