新的项目需要使用Hessian来进行接口调用,初步学习后上手使用遇到些许小坑,在此记录一
下,希望能给遇到同种问题的码云们提供一个方向
Hessian 的使用方法比较简单,这里不再赘述。直接上问题
expected end of call ('z') at 0x53 (S).
expected hessian reply at end of file
出现此种问题多数从俩个方向考虑,一,客户端 服务端的Hessian是否相同。二,是不是接口class中有重载方法
Hessian 默认是不支持函数重载的 可通过
factory.setOverloadEnabled(true);开启,至此问题解决
原理:
Hessian 默认不支持函数重载
public class HessianProxyFactory implements ServiceProxyFactory, ObjectFactory {
protected static Logger log = Logger.getLogger(HessianProxyFactory.class.getName());
private SerializerFactory _serializerFactory;
private HessianRemoteResolver _resolver = new HessianProxyResolver(this);
private String _user;
private String _password;
private String _basicAuth;
private boolean _isOverloadEnabled = false; // 默认为false
private boolean _isHessian2Reply = true;
private boolean _isHessian2Request = false;
private boolean _isChunkedPost = true;
private boolean _isDebug = false;
...
Hessian 通过代理实现,应该有一个代理类HessianProxy他实现了InvocationHandler里面有一个invoke方法
mangleName 如何获取。到此应该已经很清楚了,如果不指定重载则加载方法时只是根据名称,要不报错要不每次只是定位到第一个方法。如果指定可以重载则返回的是方法名称是 XXX_string_int_string_string_string_string_string_XXX 这种格式