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 09:41:42 UTC

[incubator-dubbo] branch master updated: support char[] for generic invoke, #2003 (#2138)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new ee7870c  support char[] for generic invoke, #2003 (#2138)
ee7870c is described below

commit ee7870c5a452629634345b36493bcc8848c6fa5f
Author: Jerrick Zhu <di...@gmail.com>
AuthorDate: Thu Jul 26 17:41:36 2018 +0800

    support char[] for generic invoke, #2003 (#2138)
---
 .../org/apache/dubbo/common/utils/CompatibleTypeUtils.java  | 13 +++++++++++++
 .../apache/dubbo/common/utils/CompatibleTypeUtilsTest.java  | 11 +++++++++++
 2 files changed, 24 insertions(+)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/CompatibleTypeUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/CompatibleTypeUtils.java
index 424cead..14a0a79 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/CompatibleTypeUtils.java
+++ b/dubbo-common/src/main/java/org/apache/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/org/apache/dubbo/common/utils/CompatibleTypeUtilsTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/CompatibleTypeUtilsTest.java
index 8c51e02..fc18ac7 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/CompatibleTypeUtilsTest.java
+++ b/dubbo-common/src/test/java/org/apache/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);
         }
 
         {