From c3f31d2c4ebdcd7851b1aa39fe0db560e9cb5bd6 Mon Sep 17 00:00:00 2001 From: zhuyong Date: Thu, 26 Jul 2018 15:51:36 +0800 Subject: [PATCH 1/2] support char[] for generic invoke, #2003 --- .../dubbo/common/utils/CompatibleTypeUtils.java | 11 +++++++++++ .../dubbo/common/utils/CompatibleTypeUtilsTest.java | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/dubbo-common/src/main/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtils.java b/dubbo-common/src/main/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtils.java index 3d54a3ed2efd..9acc3d5d1352 100644 --- a/dubbo-common/src/main/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtils.java +++ b/dubbo-common/src/main/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtils.java @@ -91,6 +91,17 @@ public static Object compatibleTypeConvert(Object value, Class type) { } catch (ClassNotFoundException e) { throw new RuntimeException(e.getMessage(), e); } + } else if (char[].class.equals(type)) { + // #2003, process string to char array for generic invoke + if (string == null) { + return null; + } + else { + int len = string.length(); + char[] chars = new char[len]; + string.getChars(0, len, chars, 0); + return chars; + } } } else if (value instanceof Number) { Number number = (Number) value; diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtilsTest.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtilsTest.java index 4b230e9c9e91..0883fd94eb31 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtilsTest.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtilsTest.java @@ -67,6 +67,11 @@ public void testCompatibleTypeConvert() throws Exception { result = CompatibleTypeUtils.compatibleTypeConvert("2011-12-11 12:24:12", Date.class); assertEquals(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2011-12-11 12:24:12"), (Date) result); + + result = CompatibleTypeUtils.compatibleTypeConvert("ab", char[].class); + assertEquals(2, ((char[]) result).length); + assertEquals('a', ((char[]) result)[0]); + assertEquals('b', ((char[]) result)[1]); } { From dc380d19c0c44235e05ac245b94c939096ea3e6e Mon Sep 17 00:00:00 2001 From: zhuyong Date: Thu, 26 Jul 2018 16:11:36 +0800 Subject: [PATCH 2/2] add null or empty string testcase --- .../com/alibaba/dubbo/common/utils/CompatibleTypeUtils.java | 4 +++- .../alibaba/dubbo/common/utils/CompatibleTypeUtilsTest.java | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/dubbo-common/src/main/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtils.java b/dubbo-common/src/main/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtils.java index 9acc3d5d1352..3f9356f21f16 100644 --- a/dubbo-common/src/main/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtils.java +++ b/dubbo-common/src/main/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtils.java @@ -92,7 +92,9 @@ public static Object compatibleTypeConvert(Object value, Class type) { throw new RuntimeException(e.getMessage(), e); } } else if (char[].class.equals(type)) { - // #2003, process string to char array for generic invoke + // Process string to char array for generic invoke + // See + // - https://github.com/apache/incubator-dubbo/issues/2003 if (string == null) { return null; } diff --git a/dubbo-common/src/test/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtilsTest.java b/dubbo-common/src/test/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtilsTest.java index 0883fd94eb31..63efc5b9542a 100644 --- a/dubbo-common/src/test/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtilsTest.java +++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/utils/CompatibleTypeUtilsTest.java @@ -72,6 +72,12 @@ public void testCompatibleTypeConvert() throws Exception { assertEquals(2, ((char[]) result).length); assertEquals('a', ((char[]) result)[0]); assertEquals('b', ((char[]) result)[1]); + + result = CompatibleTypeUtils.compatibleTypeConvert("", char[].class); + assertEquals(0, ((char[]) result).length); + + result = CompatibleTypeUtils.compatibleTypeConvert(null, char[].class); + assertEquals(null, result); } {