diff --git a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/directory/MockDirInvocation.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/directory/MockDirInvocation.java index bc237b91bb4..de4235ef655 100644 --- a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/directory/MockDirInvocation.java +++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/directory/MockDirInvocation.java @@ -16,19 +16,17 @@ */ package org.apache.dubbo.rpc.cluster.directory; -import org.apache.dubbo.rpc.AttachmentsAdapter; -import org.apache.dubbo.rpc.Invocation; -import org.apache.dubbo.rpc.Invoker; - import java.util.HashMap; import java.util.Map; - import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY; import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY; import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY; import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY; +import org.apache.dubbo.common.utils.MapUtils; import static org.apache.dubbo.rpc.Constants.TOKEN_KEY; +import org.apache.dubbo.rpc.Invocation; +import org.apache.dubbo.rpc.Invoker; /** * MockInvocation.java @@ -75,7 +73,7 @@ public Object[] getArguments() { } public Map getAttachments() { - return new AttachmentsAdapter.ObjectToStringMap(attachments); + return MapUtils.objectToStringMap(attachments); } @Override @@ -90,7 +88,7 @@ public void setAttachment(String key, String value) { @Override public void setAttachment(String key, Object value) { - setObjectAttachment(key, value); + setObjectAttachment(key, value); } @Override diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/MapUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/MapUtils.java new file mode 100644 index 00000000000..00454a5ed9a --- /dev/null +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/MapUtils.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.dubbo.common.utils; + +import java.util.HashMap; +import java.util.Map; + +/** + * Map tools + */ +public class MapUtils { + + /** + * switch Map to Map + * + * If the value of the original Map is not of type String, then toString() of value will be called + * + * @param originMap + * @return + */ + public static Map objectToStringMap(Map originMap) { + Map newStrMap = new HashMap<>(); + + if (originMap == null) { + return newStrMap; + } + + for (Map.Entry entry : originMap.entrySet()) { + String stringValue = convertToString(entry.getValue()); + if (stringValue != null) { + newStrMap.put(entry.getKey(), stringValue); + } + } + + return newStrMap; + } + + /** + * use {@link Object#toString()} switch Obj to String + * + * @param obj + * @return + */ + private static String convertToString(Object obj) { + if (obj == null) { + return null; + } else { + return obj.toString(); + } + } +} diff --git a/dubbo-compatible/src/test/java/org/apache/dubbo/service/MockInvocation.java b/dubbo-compatible/src/test/java/org/apache/dubbo/service/MockInvocation.java index a2cb52e1a87..3a1b76eeeff 100644 --- a/dubbo-compatible/src/test/java/org/apache/dubbo/service/MockInvocation.java +++ b/dubbo-compatible/src/test/java/org/apache/dubbo/service/MockInvocation.java @@ -16,7 +16,7 @@ */ package org.apache.dubbo.service; -import org.apache.dubbo.rpc.AttachmentsAdapter; +import org.apache.dubbo.common.utils.MapUtils; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; @@ -79,7 +79,7 @@ public Object[] getArguments() { } public Map getAttachments() { - return new AttachmentsAdapter.ObjectToStringMap(attachments); + return MapUtils.objectToStringMap(attachments); } @Override diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java index 27df08acdc4..65d859aa4bd 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AppResponse.java @@ -17,6 +17,7 @@ package org.apache.dubbo.rpc; +import org.apache.dubbo.common.utils.MapUtils; import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler; import java.util.HashMap; @@ -121,7 +122,7 @@ public boolean hasException() { @Override @Deprecated public Map getAttachments() { - return new AttachmentsAdapter.ObjectToStringMap(attachments); + return MapUtils.objectToStringMap(attachments); } @Override diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AttachmentsAdapter.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AttachmentsAdapter.java index def349a7530..e6cb643357b 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AttachmentsAdapter.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AttachmentsAdapter.java @@ -22,12 +22,18 @@ /** * This class provides map adapters to support attachments in RpcContext, Invocation and Result switch from * to + * + * please use {@link org.apache.dubbo.common.utils.MapUtils} + * */ +@Deprecated public class AttachmentsAdapter { + @Deprecated public static class ObjectToStringMap extends HashMap { private Map attachments; + @Deprecated public ObjectToStringMap(Map attachments) { for (Entry entry : attachments.entrySet()) { String convertResult = convert(entry.getValue()); @@ -51,10 +57,11 @@ public String remove(Object key) { } private String convert(Object obj) { - if (obj instanceof String) { - return (String) obj; + if (obj == null) { + return null; + } else { + return obj.toString(); } - return null; // or JSON.toString(obj); } @Override diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcContext.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcContext.java index 8077067378d..0a48f7cde58 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcContext.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcContext.java @@ -20,6 +20,7 @@ import org.apache.dubbo.common.URL; import org.apache.dubbo.common.threadlocal.InternalThreadLocal; import org.apache.dubbo.common.utils.CollectionUtils; +import org.apache.dubbo.common.utils.MapUtils; import org.apache.dubbo.common.utils.NetUtils; import org.apache.dubbo.common.utils.StringUtils; @@ -546,13 +547,15 @@ public RpcContext removeAttachment(String key) { } /** - * get attachments. + * get String type attachments. + * + * Best to use {{@link #getObjectAttachments()}} * * @return attachments */ @Deprecated public Map getAttachments() { - return new AttachmentsAdapter.ObjectToStringMap(this.getObjectAttachments()); + return MapUtils.objectToStringMap(this.getObjectAttachments()); } /** diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java index f94c001989e..116f3e64fba 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java @@ -17,6 +17,7 @@ package org.apache.dubbo.rpc; import org.apache.dubbo.common.URL; +import org.apache.dubbo.common.utils.MapUtils; import org.apache.dubbo.common.utils.ReflectUtils; import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.rpc.model.ApplicationModel; @@ -277,7 +278,7 @@ public void setAttachment(String key, String value) { @Deprecated @Override public Map getAttachments() { - return new AttachmentsAdapter.ObjectToStringMap(attachments); + return MapUtils.objectToStringMap(attachments); } @Deprecated diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvocation.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvocation.java index 586c990bdd6..2eb2ddd6351 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvocation.java +++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvocation.java @@ -16,7 +16,7 @@ */ package org.apache.dubbo.rpc.support; -import org.apache.dubbo.rpc.AttachmentsAdapter; +import org.apache.dubbo.common.utils.MapUtils; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; @@ -75,7 +75,7 @@ public Object[] getArguments() { } public Map getAttachments() { - return new AttachmentsAdapter.ObjectToStringMap(attachments); + return MapUtils.objectToStringMap(attachments); } @Override