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

albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new 83b4114a9f Fix ServiceConfig Ref unable to toString (#12511)
83b4114a9f is described below

commit 83b4114a9fc81bddaae6e120da33ebef29a6d44e
Author: Albumen Kevin <[email protected]>
AuthorDate: Tue Jun 13 08:35:20 2023 +0800

    Fix ServiceConfig Ref unable to toString (#12511)
---
 .../apache/dubbo/common/utils/ToStringUtils.java   | 63 ++++++++++++++++++++++
 .../org/apache/dubbo/config/AbstractConfig.java    |  3 +-
 .../org/apache/dubbo/config/ServiceConfigTest.java | 16 ++++++
 3 files changed, 81 insertions(+), 1 deletion(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ToStringUtils.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ToStringUtils.java
index d405703098..507146736a 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ToStringUtils.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ToStringUtils.java
@@ -16,7 +16,11 @@
  */
 package org.apache.dubbo.common.utils;
 
+import org.apache.dubbo.config.AbstractConfig;
+
 import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
 
 public class ToStringUtils {
 
@@ -36,4 +40,63 @@ public class ToStringUtils {
             return obj.toString();
         }
     }
+
+    public static String toString(Object obj) {
+        if (obj == null) {
+            return "null";
+        }
+        if (ClassUtils.isSimpleType(obj.getClass())) {
+            return obj.toString();
+        }
+        if (obj.getClass().isPrimitive()) {
+            return obj.toString();
+        }
+        if (obj instanceof Object[]) {
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.append("[");
+            Object[] objects = (Object[]) obj;
+            for (int i = 0; i < objects.length; i++) {
+                stringBuilder.append(toString(objects[i]));
+                if (i != objects.length - 1) {
+                    stringBuilder.append(", ");
+                }
+            }
+            stringBuilder.append("]");
+            return stringBuilder.toString();
+        }
+        if (obj instanceof List) {
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.append("[");
+            List list = (List) obj;
+            for (int i = 0; i < list.size(); i++) {
+                stringBuilder.append(toString(list.get(i)));
+                if (i != list.size() - 1) {
+                    stringBuilder.append(", ");
+                }
+            }
+            stringBuilder.append("]");
+            return stringBuilder.toString();
+        }
+        if (obj instanceof Map) {
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.append("{");
+            Map map = (Map) obj;
+            int i = 0;
+            for (Object key : map.keySet()) {
+                stringBuilder.append(toString(key));
+                stringBuilder.append("=");
+                stringBuilder.append(toString(map.get(key)));
+                if (i != map.size() - 1) {
+                    stringBuilder.append(", ");
+                }
+                i++;
+            }
+            stringBuilder.append("}");
+            return stringBuilder.toString();
+        }
+        if (obj instanceof AbstractConfig) {
+            return obj.toString();
+        }
+        return obj.getClass() + "@" + 
Integer.toHexString(System.identityHashCode(obj));
+    }
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java 
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java
index 6247a02bd4..3e4daf34bc 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java
@@ -31,6 +31,7 @@ import org.apache.dubbo.common.utils.FieldUtils;
 import org.apache.dubbo.common.utils.MethodUtils;
 import org.apache.dubbo.common.utils.ReflectUtils;
 import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.common.utils.ToStringUtils;
 import org.apache.dubbo.config.context.ConfigManager;
 import org.apache.dubbo.config.context.ConfigMode;
 import org.apache.dubbo.config.support.Nested;
@@ -967,7 +968,7 @@ public abstract class AbstractConfig implements 
Serializable {
                         buf.append(' ');
                         buf.append(key);
                         buf.append("=\"");
-                        buf.append(key.equals("password") ? "******" : value);
+                        buf.append(key.equals("password") ? "******" : 
ToStringUtils.toString(value));
                         buf.append('\"');
                     }
                 } catch (Exception e) {
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
index d65f110843..fe5a0ad643 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
@@ -683,4 +683,20 @@ class ServiceConfigTest {
 
         scheduledExecutorService.shutdown();
     }
+
+    @Test
+    void testToString() {
+        ServiceConfig<DemoService> serviceConfig = new ServiceConfig<>();
+        service.setRef(new DemoServiceImpl() {
+            @Override
+            public String toString() {
+                throw new IllegalStateException();
+            }
+        });
+        try {
+            serviceConfig.toString();
+        } catch (Throwable t) {
+            Assertions.fail(t);
+        }
+    }
 }

Reply via email to