hessian調用重載方法

          昨天給同事新增了一個重載方法的接口,通過hessian的方式調用,debug調試一直調用的是原來的接口,經過上網差查資料,如果讓hessian支持調用重載方法需要isOverloadEnabled()設爲false。

        

關於Hessian中同名方法調用的重載問題

接口中的方法簽名:
 public void test(Long i);
 public void test(String i);


獲取方法名:
  if (! _factory.isOverloadEnabled())
 mangleName = method.getName();
      else
        mangleName = mangleName(method);
發送http請求:
   conn = sendRequest(mangleName, args);

 

//hessian自己的流輸出對象

AbstractHessianOutput out = _factory.getHessianOutput(os);

      out.call(methodName, args);
      out.flush();

//call方法,序列化參數

 if (args != null) {
      for (int i = 0; i < args.length; i++)
        writeObject(args[i]);
    }

 

當設置_factory.isOverloadEnabled()爲false的時候,會直接獲取方法名
如果設置爲true的時候,會去調用AbstractSkeleton.mangleName(method, false);

方法內做法是將方法名連接方法參數類型,來唯一確認一個方法答名
Class []params = method.getParameterTypes();
    for (int i = 0; i < params.length; i++) {
      sb.append('_');
      sb.append(mangleClass(params[i], isFull));
    }


HessianSkeleton的調用方法處理方式:
String methodName = in.readMethod();
Method method = getMethod(methodName);

是通過發送的請求字節來反序列話的。sendRequest(mangleName, args);也就是mangleName

 

 

HessianProxyFactory.setOverloadEnabled(true)
當你的方法有重載的話。應該選擇將isOverloadEnabled設置爲true。這樣的話就不會造成
方法調用錯誤的情況

 


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