From 86585b5cce6aa4c3885efc055e4400ae70c1103f Mon Sep 17 00:00:00 2001 From: lizhen Date: Fri, 21 Dec 2018 15:01:45 +0800 Subject: [PATCH 1/5] fix telnet trace times is always 1 --- .../rpc/protocol/dubbo/telnet/TraceTelnetHandler.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java index 5045b31dacc..d93634285e8 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java @@ -45,17 +45,18 @@ public String telnet(Channel channel, String message) { String[] parts = message.split("\\s+"); String method; String times; + // message like : XxxService , XxxService 10 , XxxService xxxMethod , XxxService xxxMethod 10 if (service == null || service.length() == 0) { service = parts.length > 0 ? parts[0] : null; method = parts.length > 1 ? parts[1] : null; - } else { + times = parts.length > 2 ? parts[2] : "1"; + } else { //message like : xxxMethod, xxxMethod 10 method = parts.length > 0 ? parts[0] : null; + times = parts.length > 1 ? parts[1] : "1"; } if (StringUtils.isInteger(method)) { times = method; method = null; - } else { - times = parts.length > 2 ? parts[2] : "1"; } if (!StringUtils.isInteger(times)) { return "Illegal times " + times + ", must be integer."; From 160bb40ab28639219e964d8478d4530f4fabc513 Mon Sep 17 00:00:00 2001 From: lizhen Date: Sat, 29 Dec 2018 09:43:01 +0800 Subject: [PATCH 2/5] use StringUtils determine if the string is empty --- .../dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java index d93634285e8..a3940e1613e 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/TraceTelnetHandler.java @@ -46,7 +46,7 @@ public String telnet(Channel channel, String message) { String method; String times; // message like : XxxService , XxxService 10 , XxxService xxxMethod , XxxService xxxMethod 10 - if (service == null || service.length() == 0) { + if (StringUtils.isEmpty(service)) { service = parts.length > 0 ? parts[0] : null; method = parts.length > 1 ? parts[1] : null; times = parts.length > 2 ? parts[2] : "1"; From c8337713c66682605700a2072b4edb819f91fd97 Mon Sep 17 00:00:00 2001 From: lizhen Date: Sat, 5 Jan 2019 19:18:15 +0800 Subject: [PATCH 3/5] Fix 3105 , make invoke command with Json string parameter without "class" key --- .../dubbo/telnet/InvokeTelnetHandler.java | 25 +++++++--------- .../dubbo/support/DemoServiceImpl.java | 6 ++-- .../telnet/InvokerTelnetHandlerTest.java | 29 ++++++++++++++++++- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java index adbce4e11b2..6b62b942975 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java @@ -16,6 +16,8 @@ */ package org.apache.dubbo.rpc.protocol.dubbo.telnet; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import org.apache.dubbo.common.extension.Activate; import org.apache.dubbo.common.utils.ReflectUtils; import org.apache.dubbo.common.utils.StringUtils; @@ -27,14 +29,10 @@ import org.apache.dubbo.rpc.model.ProviderMethodModel; import org.apache.dubbo.rpc.model.ProviderModel; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; - import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Map; import static org.apache.dubbo.common.utils.PojoUtils.realize; import static org.apache.dubbo.rpc.RpcContext.getContext; @@ -50,19 +48,19 @@ private static Method findMethod(List methods, String metho Class[] paramTypes) { for (ProviderMethodModel model : methods) { Method m = model.getMethod(); - if (isMatch(m, args, paramTypes,method)) { + if (isMatch(m, args, paramTypes, method)) { return m; } } return null; } - private static boolean isMatch(Method method,List args, Class[] paramClasses,String lookupMethodName) { - if(!method.getName().equals(lookupMethodName)) { + private static boolean isMatch(Method method, List args, Class[] paramClasses, String lookupMethodName) { + if (!method.getName().equals(lookupMethodName)) { return false; } - Class types[]=method.getParameterTypes(); + Class types[] = method.getParameterTypes(); if (types.length != args.size()) { return false; } @@ -99,13 +97,10 @@ private static boolean isMatch(Method method,List args, Class[] param if (!ReflectUtils.isCompatible(type, arg)) { return false; } - } else if (arg instanceof Map) { - String name = (String) ((Map) arg).get("class"); - Class cls = arg.getClass(); - if (name != null && name.length() > 0) { - cls = ReflectUtils.forName(name); - } - if (!type.isAssignableFrom(cls)) { + } else if (arg instanceof JSONObject) { + try { + ((JSONObject) arg).toJavaObject(type); + } catch (Exception ex) { return false; } } else if (arg instanceof Collection) { diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoServiceImpl.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoServiceImpl.java index c1b03f64e25..64aa9585d9c 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoServiceImpl.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoServiceImpl.java @@ -71,7 +71,7 @@ public Type enumlength(Type... types) { return Type.Lower; return types[0]; } - + public Type getType(Type type) { return type; } @@ -109,12 +109,12 @@ public long add(int a, long b) { @Override public int getPerson(Person person) { - return 1; + return person.getAge(); } @Override public int getPerson(Person person1, Person perso2) { - return 2; + return person1.getAge() + perso2.getAge(); } } \ No newline at end of file diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java index 705eb64d06c..fe7a770dc80 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java @@ -25,7 +25,6 @@ import org.apache.dubbo.rpc.protocol.dubbo.support.DemoService; import org.apache.dubbo.rpc.protocol.dubbo.support.DemoServiceImpl; import org.apache.dubbo.rpc.protocol.dubbo.support.ProtocolUtils; - import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -198,6 +197,34 @@ public void testInvokeAutoFindMethod() throws RemotingException { assertTrue(result.contains("ok")); } + @Test + public void testInvokeJsonParamMethod() throws RemotingException { + mockChannel = mock(Channel.class); + given(mockChannel.getAttribute("telnet.service")).willReturn(null); + given(mockChannel.getLocalAddress()).willReturn(NetUtils.toAddress("127.0.0.1:5555")); + given(mockChannel.getRemoteAddress()).willReturn(NetUtils.toAddress("127.0.0.1:20886")); + + ProviderModel providerModel = new ProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", new DemoServiceImpl(), DemoService.class); + ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", providerModel); + String param = "{\"name\":\"Dubbo\",\"age\":8}"; + String result = invoke.telnet(mockChannel, "getPerson(" + param + ")"); + assertTrue(result.contains("8")); + } + + @Test + public void testInvokeMultiJsonParamMethod() throws RemotingException { + mockChannel = mock(Channel.class); + given(mockChannel.getAttribute("telnet.service")).willReturn(null); + given(mockChannel.getLocalAddress()).willReturn(NetUtils.toAddress("127.0.0.1:5555")); + given(mockChannel.getRemoteAddress()).willReturn(NetUtils.toAddress("127.0.0.1:20886")); + + ProviderModel providerModel = new ProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", new DemoServiceImpl(), DemoService.class); + ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", providerModel); + String param = "{\"name\":\"Dubbo\",\"age\":8},{\"name\":\"Apache\",\"age\":20}"; + String result = invoke.telnet(mockChannel, "getPerson(" + param + ")"); + assertTrue(result.contains("28")); + } + @Test public void testMessageNull() throws RemotingException { mockChannel = mock(Channel.class); From 6aebb789327061df41977a60451d96a4efed4af4 Mon Sep 17 00:00:00 2001 From: lizhen Date: Sun, 6 Jan 2019 20:49:03 +0800 Subject: [PATCH 4/5] =?UTF-8?q?Fix=203105=20=EF=BC=8CKeep=20the=20class=20?= =?UTF-8?q?key=20to=20support=20overloaded=20methods?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dubbo/telnet/InvokeTelnetHandler.java | 21 +++++++-- .../protocol/dubbo/support/DemoService.java | 3 +- .../dubbo/support/DemoServiceImpl.java | 4 ++ .../dubbo/rpc/protocol/dubbo/support/Man.java | 46 +++++++++++++++++++ .../telnet/InvokerTelnetHandlerTest.java | 24 ++++++++-- 5 files changed, 87 insertions(+), 11 deletions(-) create mode 100644 dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/Man.java diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java index 6b62b942975..85cdf5f447f 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java @@ -33,6 +33,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; import static org.apache.dubbo.common.utils.PojoUtils.realize; import static org.apache.dubbo.rpc.RpcContext.getContext; @@ -97,11 +98,21 @@ private static boolean isMatch(Method method, List args, Class[] para if (!ReflectUtils.isCompatible(type, arg)) { return false; } - } else if (arg instanceof JSONObject) { - try { - ((JSONObject) arg).toJavaObject(type); - } catch (Exception ex) { - return false; + } else if (arg instanceof Map) { + String name = (String) ((Map) arg).get("class"); + if (StringUtils.isNotEmpty(name)) { + Class cls = ReflectUtils.forName(name); + if (!type.isAssignableFrom(cls)) { + return false; + } + } else { + if (arg instanceof JSONObject) { + try { + ((JSONObject) arg).toJavaObject(type); + } catch (Exception ex) { + return false; + } + } } } else if (arg instanceof Collection) { if (!type.isArray() && !type.isAssignableFrom(arg.getClass())) { diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoService.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoService.java index fe777e37de2..a1323b852b7 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoService.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoService.java @@ -47,7 +47,7 @@ public interface DemoService { Type enumlength(Type... types); - Type getType(Type type); + Type getType(Type type); String get(CustomArgument arg1); @@ -63,4 +63,5 @@ public interface DemoService { int getPerson(Person person1, Person perso2); + String getPerson(Man man); } \ No newline at end of file diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoServiceImpl.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoServiceImpl.java index 64aa9585d9c..a5af9be110d 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoServiceImpl.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/DemoServiceImpl.java @@ -117,4 +117,8 @@ public int getPerson(Person person1, Person perso2) { return person1.getAge() + perso2.getAge(); } + @Override + public String getPerson(Man man) { + return man.getName(); + } } \ No newline at end of file diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/Man.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/Man.java new file mode 100644 index 00000000000..440630ada1b --- /dev/null +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/support/Man.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.dubbo.rpc.protocol.dubbo.support; + + +import java.io.Serializable; + +/** + * Man.java + */ +public class Man implements Serializable { + + private static final long serialVersionUID = 1L; + private String name; + private int age; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } +} \ No newline at end of file diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java index fe7a770dc80..da268f8f854 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java @@ -133,7 +133,7 @@ public void testComplexParamWithoutSpecifyParamType() throws RemotingException { // pass json value to parameter of Person type String result = invoke.telnet(mockChannel, "DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12})"); - assertTrue(result.contains("No such method getPerson in service DemoService")); + assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n12\r\n")); } @SuppressWarnings("unchecked") @@ -150,13 +150,13 @@ public void testComplexParamSpecifyParamType() throws RemotingException { // pass json value to parameter of Person type and specify it's type // one parameter with type of Person String result = invoke.telnet(mockChannel, "DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12}) -p org.apache.dubbo.rpc.protocol.dubbo.support.Person"); - assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n1\r\n")); + assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n12\r\n")); // two parameter with type of Person result = invoke.telnet(mockChannel, "DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12},{\"name\":\"lisi\",\"age\":12}) " + "-p org.apache.dubbo.rpc.protocol.dubbo.support.Person " + "org.apache.dubbo.rpc.protocol.dubbo.support.Person"); - assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n2\r\n")); + assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n24\r\n")); } @SuppressWarnings("unchecked") @@ -208,7 +208,21 @@ public void testInvokeJsonParamMethod() throws RemotingException { ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", providerModel); String param = "{\"name\":\"Dubbo\",\"age\":8}"; String result = invoke.telnet(mockChannel, "getPerson(" + param + ")"); - assertTrue(result.contains("8")); + assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n8\r\n")); + } + + @Test + public void testInvokeSpecifyTypeJsonParamMethod() throws RemotingException { + mockChannel = mock(Channel.class); + given(mockChannel.getAttribute("telnet.service")).willReturn(null); + given(mockChannel.getLocalAddress()).willReturn(NetUtils.toAddress("127.0.0.1:5555")); + given(mockChannel.getRemoteAddress()).willReturn(NetUtils.toAddress("127.0.0.1:20886")); + + ProviderModel providerModel = new ProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", new DemoServiceImpl(), DemoService.class); + ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", providerModel); + String param = "{\"name\":\"Dubbo\",\"age\":8,\"class\":\"org.apache.dubbo.rpc.protocol.dubbo.support.Man\"}"; + String result = invoke.telnet(mockChannel, "getPerson(" + param + ")"); + assertTrue(result.contains("Dubbo\r\n")); } @Test @@ -222,7 +236,7 @@ public void testInvokeMultiJsonParamMethod() throws RemotingException { ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", providerModel); String param = "{\"name\":\"Dubbo\",\"age\":8},{\"name\":\"Apache\",\"age\":20}"; String result = invoke.telnet(mockChannel, "getPerson(" + param + ")"); - assertTrue(result.contains("28")); + assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n28\r\n")); } @Test From cbcb13bdee2f1c4fd278527f1e8090d69113de35 Mon Sep 17 00:00:00 2001 From: lizhen Date: Mon, 7 Jan 2019 11:08:33 +0800 Subject: [PATCH 5/5] optimize InvokerTelnetHandlerTest --- .../dubbo/telnet/InvokeTelnetHandler.java | 7 ++++--- .../telnet/InvokerTelnetHandlerTest.java | 20 +++++++++---------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java index 85cdf5f447f..61e99022963 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokeTelnetHandler.java @@ -139,7 +139,7 @@ public String telnet(Channel channel, String message) { StringBuilder buf = new StringBuilder(); String service = (String) channel.getAttribute(ChangeTelnetHandler.SERVICE_KEY); if (!StringUtils.isEmpty(service)) { - buf.append("Use default service ").append(service).append(".\r\n"); + buf.append("Use default service ").append(service).append("."); } int i = message.indexOf("("); @@ -223,6 +223,7 @@ public String telnet(Channel channel, String message) { 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); @@ -231,10 +232,10 @@ public String telnet(Channel channel, String message) { return "Failed to invoke method " + invokeMethod.getName() + ", cause: " + StringUtils.toString(t); } } else { - buf.append("No such method ").append(method).append(" in service ").append(service); + buf.append("\r\nNo such method ").append(method).append(" in service ").append(service); } } else { - buf.append("No such service ").append(service); + buf.append("\r\nNo such service ").append(service); } return buf.toString(); } diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java index da268f8f854..fc7ccef811d 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java @@ -65,7 +65,7 @@ public void testInvokeDefaultSService() throws RemotingException { ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", providerModel); String result = invoke.telnet(mockChannel, "DemoService.echo(\"ok\")"); - assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n\"ok\"\r\n")); + assertTrue(result.contains("result: \"ok\"")); } @SuppressWarnings("unchecked") @@ -115,7 +115,7 @@ public void testInvokeByPassingEnumValue() throws RemotingException { ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", providerModel); String result = invoke.telnet(mockChannel, "getType(\"High\")"); - assertTrue(result.contains("High")); + assertTrue(result.contains("result: \"High\"")); } @@ -132,8 +132,8 @@ public void testComplexParamWithoutSpecifyParamType() throws RemotingException { // pass json value to parameter of Person type - String result = invoke.telnet(mockChannel, "DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12})"); - assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n12\r\n")); + String result = invoke.telnet(mockChannel, "DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12,\"class\":\"org.apache.dubbo.rpc.protocol.dubbo.support.Person\"})"); + assertTrue(result.contains("result: 12")); } @SuppressWarnings("unchecked") @@ -150,13 +150,13 @@ public void testComplexParamSpecifyParamType() throws RemotingException { // pass json value to parameter of Person type and specify it's type // one parameter with type of Person String result = invoke.telnet(mockChannel, "DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12}) -p org.apache.dubbo.rpc.protocol.dubbo.support.Person"); - assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n12\r\n")); + assertTrue(result.contains("result: 12")); // two parameter with type of Person result = invoke.telnet(mockChannel, "DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12},{\"name\":\"lisi\",\"age\":12}) " + "-p org.apache.dubbo.rpc.protocol.dubbo.support.Person " + "org.apache.dubbo.rpc.protocol.dubbo.support.Person"); - assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n24\r\n")); + assertTrue(result.contains("result: 24")); } @SuppressWarnings("unchecked") @@ -194,7 +194,7 @@ public void testInvokeAutoFindMethod() throws RemotingException { ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", providerModel); String result = invoke.telnet(mockChannel, "echo(\"ok\")"); - assertTrue(result.contains("ok")); + assertTrue(result.contains("result: \"ok\"")); } @Test @@ -208,7 +208,7 @@ public void testInvokeJsonParamMethod() throws RemotingException { ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", providerModel); String param = "{\"name\":\"Dubbo\",\"age\":8}"; String result = invoke.telnet(mockChannel, "getPerson(" + param + ")"); - assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n8\r\n")); + assertTrue(result.contains("result: 8") || result.contains("result: \"Dubbo\"")); } @Test @@ -222,7 +222,7 @@ public void testInvokeSpecifyTypeJsonParamMethod() throws RemotingException { ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", providerModel); String param = "{\"name\":\"Dubbo\",\"age\":8,\"class\":\"org.apache.dubbo.rpc.protocol.dubbo.support.Man\"}"; String result = invoke.telnet(mockChannel, "getPerson(" + param + ")"); - assertTrue(result.contains("Dubbo\r\n")); + assertTrue(result.contains("result: \"Dubbo\"")); } @Test @@ -236,7 +236,7 @@ public void testInvokeMultiJsonParamMethod() throws RemotingException { ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", providerModel); String param = "{\"name\":\"Dubbo\",\"age\":8},{\"name\":\"Apache\",\"age\":20}"; String result = invoke.telnet(mockChannel, "getPerson(" + param + ")"); - assertTrue(result.contains("Use default service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n28\r\n")); + assertTrue(result.contains("result: 28")); } @Test