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

davsclaus pushed a commit to branch rest-known
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 2d38b27831365fd3fd2804b87fac0861421c3f08
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Aug 31 11:07:53 2023 +0200

    CAMEL-19814: camel-rest - Should filter out query parameters that are for 
the producer endpoint
---
 .../apache/camel/component/rest/RestComponent.java | 29 +++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
 
b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
index 8b63431b457..fd29c7e8e34 100644
--- 
a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
+++ 
b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
@@ -21,11 +21,14 @@ import java.util.Map;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.extension.ComponentVerifierExtension;
+import org.apache.camel.spi.EndpointUriFactory;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.RestConfiguration;
+import org.apache.camel.spi.UriFactoryResolver;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultComponent;
 import org.apache.camel.util.FileUtil;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.URISupport;
 
@@ -84,11 +87,24 @@ public class RestComponent extends DefaultComponent {
             // use only what remains and at this point parameters that have 
been used have been removed
             // without overwriting any query parameters set via 
queryParameters endpoint option
             final Map<String, Object> queryParameters = new 
LinkedHashMap<>(parameters);
+
+            // filter out known options from the producer, as they should not 
be in the query parameters
+            EndpointUriFactory factory = getEndpointUriFactory(pname);
+            if (factory != null) {
+                for (String key : parameters.keySet()) {
+                    if (factory.propertyNames().contains(key)) {
+                        queryParameters.remove(key);
+                    }
+                }
+            }
+
             final Map<String, Object> existingQueryParameters = 
URISupport.parseQuery(answer.getQueryParameters());
             queryParameters.putAll(existingQueryParameters);
 
             final String remainingParameters = 
URISupport.createQueryString(queryParameters);
-            answer.setQueryParameters(remainingParameters);
+            if (ObjectHelper.isNotEmpty(remainingParameters)) {
+                answer.setQueryParameters(remainingParameters);
+            }
         }
 
         answer.setParameters(parameters);
@@ -190,6 +206,17 @@ public class RestComponent extends DefaultComponent {
     // Helpers
     // ****************************************
 
+    private EndpointUriFactory getEndpointUriFactory(String name) {
+        if (name != null) {
+            UriFactoryResolver resolver
+                    = 
getCamelContext().getCamelContextExtension().getContextPlugin(UriFactoryResolver.class);
+            if (resolver != null) {
+                return resolver.resolveFactory(name, getCamelContext());
+            }
+        }
+        return null;
+    }
+
     public ComponentVerifierExtension getVerifier() {
         return (scope, parameters) -> 
getExtension(ComponentVerifierExtension.class)
                 .orElseThrow(UnsupportedOperationException::new).verify(scope, 
parameters);

Reply via email to