From c3f31d2c4ebdcd7851b1aa39fe0db560e9cb5bd6 Mon Sep 17 00:00:00 2001 From: zhuyong Date: Thu, 26 Jul 2018 15:51:36 +0800 Subject: [PATCH] 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 3d54a3ed2ef..9acc3d5d135 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 4b230e9c9e9..0883fd94eb3 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]); } {