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