diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/legacy/InvokeTelnetHandler.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/legacy/InvokeTelnetHandler.java index 0ed2f4488d..571c6caa33 100644 --- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/legacy/InvokeTelnetHandler.java +++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/legacy/InvokeTelnetHandler.java @@ -90,29 +90,34 @@ public class InvokeTelnetHandler implements TelnetHandler { invokeMethod = (Method) channel.getAttribute(SelectTelnetHandler.SELECT_METHOD_KEY); } else { for (ProviderModel provider : ApplicationModel.allProviderModels()) { - if (isServiceMatch(service, provider)) { - selectedProvider = provider; - List methodList = findSameSignatureMethod(provider.getAllMethods(), method, list); - if (CollectionUtils.isNotEmpty(methodList)) { - if (methodList.size() == 1) { - invokeMethod = methodList.get(0); - } else { - List matchMethods = findMatchMethods(methodList, list); - if (CollectionUtils.isNotEmpty(matchMethods)) { - if (matchMethods.size() == 1) { - invokeMethod = matchMethods.get(0); - } else { //exist overridden method - channel.setAttribute(INVOKE_METHOD_PROVIDER_KEY, provider); - channel.setAttribute(INVOKE_METHOD_LIST_KEY, matchMethods); - channel.setAttribute(INVOKE_MESSAGE_KEY, message); - printSelectMessage(buf, matchMethods); - return buf.toString(); - } - } - } - } + if (!isServiceMatch(service, provider)) { + continue; + } + + selectedProvider = provider; + List methodList = findSameSignatureMethod(provider.getAllMethods(), method, list); + if (CollectionUtils.isEmpty(methodList)) { break; } + + if (methodList.size() == 1) { + invokeMethod = methodList.get(0); + } else { + List matchMethods = findMatchMethods(methodList, list); + if (CollectionUtils.isEmpty(matchMethods)) { + break; + } + if (matchMethods.size() == 1) { + invokeMethod = matchMethods.get(0); + } else { //exist overridden method + channel.setAttribute(INVOKE_METHOD_PROVIDER_KEY, provider); + channel.setAttribute(INVOKE_METHOD_LIST_KEY, matchMethods); + channel.setAttribute(INVOKE_MESSAGE_KEY, message); + printSelectMessage(buf, matchMethods); + return buf.toString(); + } + } + break; } } @@ -120,33 +125,33 @@ public class InvokeTelnetHandler implements TelnetHandler { if (!StringUtils.isEmpty(service)) { buf.append("Use default service ").append(service).append("."); } - if (selectedProvider != null) { - if (invokeMethod != null) { - try { - Object[] array = realize(list.toArray(), invokeMethod.getParameterTypes(), - invokeMethod.getGenericParameterTypes()); - long start = System.currentTimeMillis(); - AppResponse result = new AppResponse(); - try { - Object o = invokeMethod.invoke(selectedProvider.getServiceInstance(), array); - result.setValue(o); - } catch (Throwable t) { - result.setException(t); - } - long end = System.currentTimeMillis(); - buf.append("\r\nresult: "); - buf.append(JSON.toJSONString(result.recreate())); - buf.append("\r\nelapsed: "); - buf.append(end - start); - buf.append(" ms."); - } catch (Throwable t) { - return "Failed to invoke method " + invokeMethod.getName() + ", cause: " + StringUtils.toString(t); - } - } else { - buf.append("\r\nNo such method ").append(method).append(" in service ").append(service); - } - } else { + if (selectedProvider == null) { buf.append("\r\nNo such service ").append(service); + return buf.toString(); + } + if (invokeMethod == null) { + buf.append("\r\nNo such method ").append(method).append(" in service ").append(service); + return buf.toString(); + } + try { + Object[] array = realize(list.toArray(), invokeMethod.getParameterTypes(), + invokeMethod.getGenericParameterTypes()); + long start = System.currentTimeMillis(); + AppResponse result = new AppResponse(); + try { + Object o = invokeMethod.invoke(selectedProvider.getServiceInstance(), array); + result.setValue(o); + } catch (Throwable t) { + result.setException(t); + } + long end = System.currentTimeMillis(); + buf.append("\r\nresult: "); + buf.append(JSON.toJSONString(result.recreate())); + buf.append("\r\nelapsed: "); + buf.append(end - start); + buf.append(" ms."); + } catch (Throwable t) { + return "Failed to invoke method " + invokeMethod.getName() + ", cause: " + StringUtils.toString(t); } return buf.toString(); }