You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by yi...@apache.org on 2018/07/26 08:40:50 UTC

[incubator-dubbo] branch 2.6.x updated: support char[] for generic invoke #2003 (#2137)

This is an automated email from the ASF dual-hosted git repository.

yiji pushed a commit to branch 2.6.x
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/2.6.x by this push:
     new 0882c83  support char[] for generic invoke #2003 (#2137)
0882c83 is described below

commit 0882c83bb9c772966d57cbf161a60ec3633f1e1e
Author: Jerrick Zhu <di...@gmail.com>
AuthorDate: Thu Jul 26 16:40:32 2018 +0800

    support char[] for generic invoke #2003 (#2137)
    
    * support char[] for generic invoke, #2003
    
    * add null or empty string testcase
---
 .../com/alibaba/dubbo/common/utils/CompatibleTypeUtils.java | 13 +++++++++++++
 .../alibaba/dubbo/common/utils/CompatibleTypeUtilsTest.java | 11 +++++++++++
 2 files changed, 24 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 3d54a3e..3f9356f 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,19 @@ public class CompatibleTypeUtils {
                 } catch (ClassNotFoundException e) {
                     throw new RuntimeException(e.getMessage(), e);
                 }
+            } else if (char[].class.equals(type)) {
+                // Process string to char array for generic invoke
+                // See
+                // - https://github.com/apache/incubator-dubbo/issues/2003
+                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 4b230e9..63efc5b 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,17 @@ public class CompatibleTypeUtilsTest {
 
             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]);
+
+            result = CompatibleTypeUtils.compatibleTypeConvert("", char[].class);
+            assertEquals(0, ((char[]) result).length);
+
+            result = CompatibleTypeUtils.compatibleTypeConvert(null, char[].class);
+            assertEquals(null, result);
         }
 
         {