Fix ServiceConfig Ref unable to toString (#12511)

This commit is contained in:
Albumen Kevin 2023-06-13 08:35:20 +08:00 committed by GitHub
parent ee87c8d5c2
commit 83b4114a9f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 81 additions and 1 deletions

View File

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

View File

@ -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) {

View File

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