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

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


The following commit(s) were added to refs/heads/master by this push:
     new 9a7a8e5  Fix URLBuilder#addParametersIfAbsent (#7762)
9a7a8e5 is described below

commit 9a7a8e560ffe6af3028a463f56349cacaa760b9b
Author: passer <[email protected]>
AuthorDate: Sat May 15 20:09:49 2021 +0800

    Fix URLBuilder#addParametersIfAbsent (#7762)
    
    * Fix URLBuilder#addParametersIfAbsent (#7761)
    
    * putIfAbsent replace with addParameterIfAbsent (#7761)
---
 .../java/org/apache/dubbo/common/URLBuilder.java   |  4 +-
 .../org/apache/dubbo/common/URLBuilderTest.java    | 44 ++++++++++++++++++++++
 2 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java
index eeef637..d6ec39f 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java
@@ -326,7 +326,9 @@ public final class URLBuilder {
         if (CollectionUtils.isEmptyMap(parameters)) {
             return this;
         }
-        this.parameters.putAll(parameters);
+        for(Map.Entry<String, String> entry : parameters.entrySet()) {
+            addParameterIfAbsent(entry.getKey(), entry.getValue());
+        }
         return this;
     }
 
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/URLBuilderTest.java 
b/dubbo-common/src/test/java/org/apache/dubbo/common/URLBuilderTest.java
index c607bd3..85dbd62 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/URLBuilderTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/URLBuilderTest.java
@@ -19,6 +19,8 @@ package org.apache.dubbo.common;
 import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -97,4 +99,46 @@ public class URLBuilderTest {
         assertThat(url2.getParameter("version"), equalTo("1.0.0"));
         assertThat(url2.getParameter("absentKey"), equalTo("absentValue"));
     }
+
+    @Test
+    public void shouldAddParameters() {
+        URL url1 = 
URL.valueOf("dubbo://admin:[email protected]:20880/context/path?version=1.0.0&application=morgan&key2=v2");
+
+        // string pairs test
+        URL url2 = URLBuilder.from(url1)
+                .addParameters("version", "1.0.0", "absentKey1", 
"absentValue1")
+                .build();
+        assertThat(url2.getParameter("version"), equalTo("1.0.0"));
+        assertThat(url2.getParameter("absentKey1"), equalTo("absentValue1"));
+
+        // map test
+        Map<String, String> parameters = new HashMap<String, String>(){
+            {
+                this.put("version", "2.0.0");
+                this.put("absentKey2", "absentValue2");
+            }
+        };
+        url2 = URLBuilder.from(url1)
+                .addParameters(parameters)
+                .build();
+        assertThat(url2.getParameter("version"), equalTo("2.0.0"));
+        assertThat(url2.getParameter("absentKey2"), equalTo("absentValue2"));
+    }
+
+    @Test
+    public void shouldAddParametersIfAbsent() {
+        URL url1 = 
URL.valueOf("dubbo://admin:[email protected]:20880/context/path?version=1.0.0&application=morgan&key2=v2");
+
+        Map<String, String> parameters = new HashMap<String, String>(){
+            {
+                this.put("version", "2.0.0");
+                this.put("absentKey", "absentValue");
+            }
+        };
+        URL url2 = URLBuilder.from(url1)
+                .addParametersIfAbsent(parameters)
+                .build();
+        assertThat(url2.getParameter("version"), equalTo("1.0.0"));
+        assertThat(url2.getParameter("absentKey"), equalTo("absentValue"));
+    }
 }

Reply via email to