dubbo2.5.5-dubbo2.6.0版本不支持泛型的解决方法
在使用dubbo-2.6.0.jar时,自己的代码服务(入参使用是泛型)依赖于dubbo,对外是dubbo接口,客户端使用的是dubbo-2.8.4
出现的情况是:
在cmd中使用invoke命令出现No Such Method...情况,但是使用客户端(dubbo-2.8.4.jar)代码调用时是正常的。就是不支持invoke
dubbo-2.6.0.jar源码中
解决方法:将dubbo-2.6.0中的findMethod替换成2.5.3的方法,再重新编译打包
将findMethod方法替换成
private static Method findMethod(Exporter<?> exporter, String method, List<Object> args) { Invoker<?> invoker = exporter.getInvoker(); Method[] methods = invoker.getInterface().getMethods(); Method invokeMethod = null; Method[] arr$ = methods; int len$ = methods.length; for(int i$ = 0; i$ < len$; ++i$) { Method m = arr$[i$]; if (m.getName().equals(method) && m.getParameterTypes().length == args.size()) { if (invokeMethod != null) { if (isMatch(invokeMethod.getParameterTypes(), args)) { invokeMethod = m; break; } } else { invokeMethod = m; } invoker = exporter.getInvoker(); } } return invokeMethod; }
cmd到根目录进行打包,mvn clean package -Dmaven.test.skip=true
然后放入到项目中使用就会解决invoke不支持泛型的情况