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);
+ }
+ }
}