新的項目需要使用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 這種格式