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

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 4e8d18d3d0f2b0594ec202637991abde09881731
Author: luke.me <[email protected]>
AuthorDate: Sun Jun 18 12:46:51 2023 +0900

    The return value of the getDecodeQuery method has been changed from query 
to uri.
---
 .../camel/impl/engine/AbstractCamelContext.java     |  5 ++---
 .../camel/impl/engine/DefaultCamelContextTest.java  |  3 +--
 .../main/java/org/apache/camel/util/URISupport.java | 21 ++++++++++++++++++---
 .../java/org/apache/camel/util/URISupportTest.java  |  6 +++---
 4 files changed, 24 insertions(+), 11 deletions(-)

diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 82cede02b93..0439da8df0c 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -710,9 +710,8 @@ public abstract class AbstractCamelContext extends 
BaseService
             answer.add(oldEndpoint);
             stopServices(oldEndpoint);
         } else {
-            String decodeQuery = URISupport.getDecodeQuery(uri);
-            if(decodeQuery != null) {
-                String decodeUri = StringHelper.before(uri, "?") + "?" + 
decodeQuery;
+            String decodeUri = URISupport.getDecodeQuery(uri);
+            if(decodeUri != null) {
                 oldEndpoint = endpoints.remove(getEndpointKey(decodeUri));
             }
             if(oldEndpoint != null){
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java
index eda6076b268..336f681ccab 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java
@@ -439,8 +439,7 @@ public class DefaultCamelContextTest extends TestSupport {
         for(Endpoint endpoint : routeEndpoints) {
             Endpoint oldEndpoint = 
endpoints.remove(ctx.getEndpointKey(endpoint.getEndpointUri()));
             if(oldEndpoint == null) {
-                String decodeQuery = 
URISupport.getDecodeQuery(endpoint.getEndpointUri());
-                String decodeUri = 
StringHelper.before(endpoint.getEndpointUri(), "?") + "?" + decodeQuery;
+                String decodeUri = 
URISupport.getDecodeQuery(endpoint.getEndpointUri());
                 oldEndpoint = endpoints.remove(ctx.getEndpointKey(decodeUri));
 
             } else {
diff --git 
a/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java 
b/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java
index 4e7c1625e32..ed724de74e9 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/URISupport.java
@@ -746,18 +746,33 @@ public final class URISupport {
         return rc;
     }
 
+    private static String makeUri(String uriWithoutQuery, String query){
+        int len = uriWithoutQuery.length();
+        if (query != null) {
+            len += 1 + query.length();
+            StringBuilder sb = new StringBuilder(len);
+            sb.append(uriWithoutQuery).append('?').append(query);
+            return sb.toString();
+        } else {
+            StringBuilder sb = new StringBuilder(len);
+            sb.append(uriWithoutQuery);
+            return sb.toString();
+        }
+    }
+
     public static String getDecodeQuery(final String uri) {
         try {
             URI u = new URI(uri);
             String query = URISupport.prepareQuery(u);
+            String uriWithoutQuery = URISupport.stripQuery(uri);
             if(query == null){
-                return null;
+                return uriWithoutQuery;
             }else {
                 Map<String, Object> parameters = URISupport.parseQuery(query, 
false, false);
                 if (parameters.size() == 1) {
                     // only 1 parameter need to create new query string
                     query = URISupport.createQueryString(parameters);
-                    return query;
+                    return makeUri(uriWithoutQuery, query);
                 } else {
                     // reorder parameters a..z
                     final Set<String> keySet = parameters.keySet();
@@ -766,7 +781,7 @@ public final class URISupport {
 
                     // build uri object with sorted parameters
                     query = URISupport.createQueryString(parametersArray, 
parameters, true);
-                    return query;
+                    return makeUri(uriWithoutQuery, query);
                 }
             }
         }catch(URISyntaxException ex){
diff --git 
a/core/camel-util/src/test/java/org/apache/camel/util/URISupportTest.java 
b/core/camel-util/src/test/java/org/apache/camel/util/URISupportTest.java
index 974fe5d5bd5..832206e15d4 100644
--- a/core/camel-util/src/test/java/org/apache/camel/util/URISupportTest.java
+++ b/core/camel-util/src/test/java/org/apache/camel/util/URISupportTest.java
@@ -617,7 +617,7 @@ public class URISupportTest {
     public void testGetDecodeQuery() throws Exception{
         String out = 
URISupport.normalizeUri("smtp://localhost?username=davsclaus&password=secret");
         String enc = UnsafeUriCharactersEncoder.encode(out);
-        String dec = StringHelper.before(enc,"?") + "?" + 
URISupport.getDecodeQuery(enc);
+        String dec = URISupport.getDecodeQuery(enc);
         assertEquals(out, dec);
 
         out = 
URISupport.normalizeUri("smtp://localhost?password=secret&username=davsclaus");
@@ -627,14 +627,14 @@ public class URISupportTest {
         enc = UnsafeUriCharactersEncoder.encode(out);
         assertNotEquals(out, enc);
 
-        dec = StringHelper.before(enc,"?") + "?" + 
URISupport.getDecodeQuery(enc);
+        dec = URISupport.getDecodeQuery(enc);
         assertEquals(out, dec);
 
         out = 
URISupport.normalizeUri("bean://MyBean?method=RAW(addString(%22#@a%23, test))");
         enc = UnsafeUriCharactersEncoder.encode(out);
         assertNotEquals(out, enc);
 
-        dec = StringHelper.before(enc,"?") + "?" + 
URISupport.getDecodeQuery(enc);
+        dec = URISupport.getDecodeQuery(enc);
         assertEquals(out, dec);
 
     }

Reply via email to