com.caucho.hessian.io.HessianProtocolException: expected hessian reply at end of file

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章