Fix ServiceConfig Ref unable to toString (#12511)
This commit is contained in:
parent
ee87c8d5c2
commit
83b4114a9f
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue