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

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

commit f0f7dc1e7e32e84b52fcad0b1a68f1b1e60e3d0b
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu Jan 21 16:04:37 2021 +0100

    CAMEL-15759: SendDynamicAware should not rely on RuntimeCamelCatalog.
---
 .../file/GenericFileSendDynamicAware.java          |  5 --
 .../camel/http/base/HttpSendDynamicAware.java      |  6 --
 .../camel/component/jms/JmsSendDynamicAware.java   |  4 -
 .../component/kafka/KafkaSendDynamicAware.java     |  4 -
 .../paho/mqtt5/PahoMqtt5SendDynamicAware.java      |  5 --
 .../camel/component/paho/PahoSendDynamicAware.java |  5 --
 .../rabbitmq/RabbitMQSendDynamicAware.java         |  5 --
 .../camel/component/sjms/SjmsSendDynamicAware.java |  5 --
 .../SpringRabbitMQSendDynamicAware.java            |  5 --
 .../vertx/kafka/VertxKafkaSendDynamicAware.java    |  5 --
 .../org/apache/camel/spi/SendDynamicAware.java     |  8 --
 .../camel/component/bar/BarSendDynamicAware.java   |  5 --
 .../processor/ToDynamicSendDynamicAwareTest.java   | 46 +++++++++++
 .../interceptor/AdviceWithLambdaTest.java          |  3 +-
 .../support/component/SendDynamicAwareSupport.java | 96 +++++++++-------------
 .../ROOT/pages/camel-3x-upgrade-guide-3_8.adoc     |  5 +-
 16 files changed, 93 insertions(+), 119 deletions(-)

diff --git 
a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileSendDynamicAware.java
 
b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileSendDynamicAware.java
index 0c5a210..0ca4dbf 100644
--- 
a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileSendDynamicAware.java
+++ 
b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileSendDynamicAware.java
@@ -26,11 +26,6 @@ import org.apache.camel.util.URISupport;
 public abstract class GenericFileSendDynamicAware extends 
SendDynamicAwareSupport {
 
     @Override
-    public boolean isOnlyDynamicQueryParameters() {
-        return true;
-    }
-
-    @Override
     public boolean isLenientProperties() {
         return false;
     }
diff --git 
a/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpSendDynamicAware.java
 
b/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpSendDynamicAware.java
index bb69860..8247708 100644
--- 
a/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpSendDynamicAware.java
+++ 
b/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpSendDynamicAware.java
@@ -39,12 +39,6 @@ public class HttpSendDynamicAware extends 
SendDynamicAwareSupport {
     private final Processor postProcessor = new HttpSendDynamicPostProcessor();
 
     @Override
-    public boolean isOnlyDynamicQueryParameters() {
-        // we compute our own host:port/path so its okay so say true here
-        return true;
-    }
-
-    @Override
     public boolean isLenientProperties() {
         return true;
     }
diff --git 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsSendDynamicAware.java
 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsSendDynamicAware.java
index 11eab1c..0342893 100644
--- 
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsSendDynamicAware.java
+++ 
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsSendDynamicAware.java
@@ -56,10 +56,6 @@ public class JmsSendDynamicAware extends ServiceSupport 
implements SendDynamicAw
         this.camelContext = camelContext;
     }
 
-    @Override
-    public boolean isOnlyDynamicQueryParameters() {
-        return true;
-    }
 
     @Override
     public boolean isLenientProperties() {
diff --git 
a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaSendDynamicAware.java
 
b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaSendDynamicAware.java
index 0dfc46d..404f804 100644
--- 
a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaSendDynamicAware.java
+++ 
b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaSendDynamicAware.java
@@ -56,10 +56,6 @@ public class KafkaSendDynamicAware extends ServiceSupport 
implements SendDynamic
         this.camelContext = camelContext;
     }
 
-    @Override
-    public boolean isOnlyDynamicQueryParameters() {
-        return true;
-    }
 
     @Override
     public boolean isLenientProperties() {
diff --git 
a/components/camel-paho-mqtt5/src/main/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5SendDynamicAware.java
 
b/components/camel-paho-mqtt5/src/main/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5SendDynamicAware.java
index a067420..caae4b7 100644
--- 
a/components/camel-paho-mqtt5/src/main/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5SendDynamicAware.java
+++ 
b/components/camel-paho-mqtt5/src/main/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5SendDynamicAware.java
@@ -57,11 +57,6 @@ public class PahoMqtt5SendDynamicAware extends 
ServiceSupport implements SendDyn
     }
 
     @Override
-    public boolean isOnlyDynamicQueryParameters() {
-        return true;
-    }
-
-    @Override
     public boolean isLenientProperties() {
         return false;
     }
diff --git 
a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoSendDynamicAware.java
 
b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoSendDynamicAware.java
index 3645399..31555c4 100644
--- 
a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoSendDynamicAware.java
+++ 
b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoSendDynamicAware.java
@@ -57,11 +57,6 @@ public class PahoSendDynamicAware extends ServiceSupport 
implements SendDynamicA
     }
 
     @Override
-    public boolean isOnlyDynamicQueryParameters() {
-        return true;
-    }
-
-    @Override
     public boolean isLenientProperties() {
         return false;
     }
diff --git 
a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQSendDynamicAware.java
 
b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQSendDynamicAware.java
index 7b54881..93cdc63 100644
--- 
a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQSendDynamicAware.java
+++ 
b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQSendDynamicAware.java
@@ -57,11 +57,6 @@ public class RabbitMQSendDynamicAware extends ServiceSupport 
implements SendDyna
     }
 
     @Override
-    public boolean isOnlyDynamicQueryParameters() {
-        return true;
-    }
-
-    @Override
     public boolean isLenientProperties() {
         return false;
     }
diff --git 
a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsSendDynamicAware.java
 
b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsSendDynamicAware.java
index 5e87b88..fd3697c 100644
--- 
a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsSendDynamicAware.java
+++ 
b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsSendDynamicAware.java
@@ -57,11 +57,6 @@ public class SjmsSendDynamicAware extends ServiceSupport 
implements SendDynamicA
     }
 
     @Override
-    public boolean isOnlyDynamicQueryParameters() {
-        return true;
-    }
-
-    @Override
     public boolean isLenientProperties() {
         return false;
     }
diff --git 
a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQSendDynamicAware.java
 
b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQSendDynamicAware.java
index a79bfe0..9bc330a 100644
--- 
a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQSendDynamicAware.java
+++ 
b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQSendDynamicAware.java
@@ -60,11 +60,6 @@ public class SpringRabbitMQSendDynamicAware extends 
ServiceSupport implements Se
     }
 
     @Override
-    public boolean isOnlyDynamicQueryParameters() {
-        return true;
-    }
-
-    @Override
     public boolean isLenientProperties() {
         return false;
     }
diff --git 
a/components/camel-vertx-kafka/camel-vertx-kafka-component/src/main/java/org/apache/camel/component/vertx/kafka/VertxKafkaSendDynamicAware.java
 
b/components/camel-vertx-kafka/camel-vertx-kafka-component/src/main/java/org/apache/camel/component/vertx/kafka/VertxKafkaSendDynamicAware.java
index 73adccd..db901d6 100644
--- 
a/components/camel-vertx-kafka/camel-vertx-kafka-component/src/main/java/org/apache/camel/component/vertx/kafka/VertxKafkaSendDynamicAware.java
+++ 
b/components/camel-vertx-kafka/camel-vertx-kafka-component/src/main/java/org/apache/camel/component/vertx/kafka/VertxKafkaSendDynamicAware.java
@@ -57,11 +57,6 @@ public class VertxKafkaSendDynamicAware extends 
ServiceSupport implements SendDy
     }
 
     @Override
-    public boolean isOnlyDynamicQueryParameters() {
-        return true;
-    }
-
-    @Override
     public boolean isLenientProperties() {
         return false;
     }
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/SendDynamicAware.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/SendDynamicAware.java
index 17723d7..09e374d 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/SendDynamicAware.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/SendDynamicAware.java
@@ -45,14 +45,6 @@ public interface SendDynamicAware extends Service, 
CamelContextAware {
     String getScheme();
 
     /**
-     * Whether only the query parameters can be dynamic and the context-path 
must be static.
-     *
-     * If true then Camel can restructure endpoint uri using a simple and 
faster parser. On the other hand if the
-     * context-path and authority part of the URI can be dynamic then Camel 
has to use a more complex and slower parser.
-     */
-    boolean isOnlyDynamicQueryParameters();
-
-    /**
      * Whether to traverses the given parameters, and resolve any parameter 
values which uses the RAW token syntax:
      * <tt>key=RAW(value)</tt>. And then remove the RAW tokens, and replace 
the content of the value, with just the
      * value.
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/component/bar/BarSendDynamicAware.java
 
b/core/camel-core/src/test/java/org/apache/camel/component/bar/BarSendDynamicAware.java
index 2df2959..171c996 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/component/bar/BarSendDynamicAware.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/component/bar/BarSendDynamicAware.java
@@ -42,11 +42,6 @@ public class BarSendDynamicAware extends 
SendDynamicAwareSupport {
     }
 
     @Override
-    public boolean isOnlyDynamicQueryParameters() {
-        return false;
-    }
-
-    @Override
     public boolean resolveRawParameterValues() {
         return true;
     }
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/processor/ToDynamicSendDynamicAwareTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/processor/ToDynamicSendDynamicAwareTest.java
index c8e95ae..b377a7d 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/processor/ToDynamicSendDynamicAwareTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/processor/ToDynamicSendDynamicAwareTest.java
@@ -16,16 +16,30 @@
  */
 package org.apache.camel.processor;
 
+import java.net.URISyntaxException;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.bar.BarComponent;
 import org.apache.camel.component.bar.BarConstants;
+import org.apache.camel.support.component.EndpointUriFactorySupport;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class ToDynamicSendDynamicAwareTest extends ContextTestSupport {
 
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+        context.getRegistry().bind("myFactory", new BarEndpointUriFactory());
+        return context;
+    }
+
     @Test
     public void testToDynamic() throws Exception {
         getMockEndpoint("mock:bar").expectedBodiesReceived("Hello Camel 
ordered beer", "Hello World ordered wine");
@@ -53,4 +67,36 @@ public class ToDynamicSendDynamicAwareTest extends 
ContextTestSupport {
             }
         };
     }
+
+    private class BarEndpointUriFactory extends EndpointUriFactorySupport {
+
+        @Override
+        public boolean isEnabled(String scheme) {
+            return "bar".equals(scheme);
+        }
+
+        @Override
+        public String buildUri(String scheme, Map<String, Object> properties, 
boolean encode) throws URISyntaxException {
+            // not in use for this test
+            return null;
+        }
+
+        @Override
+        public Set<String> propertyNames() {
+            Set<String> answer = new HashSet<>();
+            answer.add("name");
+            answer.add("drink");
+            return answer;
+        }
+
+        @Override
+        public Set<String> secretPropertyNames() {
+            return null;
+        }
+
+        @Override
+        public boolean isLenientProperties() {
+            return false;
+        }
+    }
 }
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithLambdaTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithLambdaTest.java
index d61d5ce..0c7eafe 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithLambdaTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithLambdaTest.java
@@ -56,7 +56,8 @@ public class AdviceWithLambdaTest extends ContextTestSupport {
     @Test
     public void testAdvisedSimple() throws Exception {
         AdviceWith.adviceWith(context, null, a -> {
-            
a.interceptSendToEndpoint("mock:foo").skipSendToOriginalEndpoint().transform(a.simple("Hello
 ${body}")).to("log:foo").to("mock:advised");
+            
a.interceptSendToEndpoint("mock:foo").skipSendToOriginalEndpoint().transform(a.simple("Hello
 ${body}"))
+                    .to("log:foo").to("mock:advised");
         });
 
         getMockEndpoint("mock:foo").expectedMessageCount(0);
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/component/SendDynamicAwareSupport.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/component/SendDynamicAwareSupport.java
index d01c906..a868dcd 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/component/SendDynamicAwareSupport.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/component/SendDynamicAwareSupport.java
@@ -23,7 +23,6 @@ import java.util.Set;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.catalog.RuntimeCamelCatalog;
 import org.apache.camel.spi.EndpointUriFactory;
 import org.apache.camel.spi.SendDynamicAware;
 import org.apache.camel.support.service.ServiceSupport;
@@ -36,7 +35,6 @@ public abstract class SendDynamicAwareSupport extends 
ServiceSupport implements
 
     private CamelContext camelContext;
     private Set<String> knownProperties;
-    private RuntimeCamelCatalog catalog;
     private String scheme;
 
     @Override
@@ -66,86 +64,74 @@ public abstract class SendDynamicAwareSupport extends 
ServiceSupport implements
 
     @Override
     protected void doInit() throws Exception {
-        if (isOnlyDynamicQueryParameters()) {
+        if (knownProperties == null) {
             // optimize to eager load the list of known properties
             EndpointUriFactory factory = 
getCamelContext().adapt(ExtendedCamelContext.class).getEndpointUriFactory(getScheme());
             if (factory == null) {
                 throw new IllegalStateException("Cannot find 
EndpointUriFactory for component: " + getScheme());
             }
             knownProperties = factory.propertyNames();
-        } else {
-            catalog = 
getCamelContext().adapt(ExtendedCamelContext.class).getRuntimeCamelCatalog();
         }
     }
 
     public Map<String, Object> endpointProperties(Exchange exchange, String 
uri) throws Exception {
         Map<String, Object> properties;
-        if (isOnlyDynamicQueryParameters()) {
-            // optimize as we know its only query parameters that can be 
dynamic
-            Map<String, Object> map = 
URISupport.parseQuery(URISupport.extractQuery(uri));
-            if (map != null && !map.isEmpty() && isLenientProperties()) {
-                if (resolveRawParameterValues()) {
-                    // parameters using raw syntax: RAW(value)
-                    // should have the token removed, so its only the value we 
have in parameters, as we are about to create
-                    // an endpoint and want to have the parameter values 
without the RAW tokens
-                    URISupport.resolveRawParameterValues(map);
-                }
-                // okay so only add the known properties as they are the non 
lenient properties
-                properties = new LinkedHashMap<>();
-                map.forEach((k, v) -> {
-                    if (knownProperties.contains(k)) {
-                        properties.put(k, v);
-                    }
-                });
-            } else {
-                properties = map;
+        // optimize as we know its only query parameters that can be dynamic
+        Map<String, Object> map = 
URISupport.parseQuery(URISupport.extractQuery(uri));
+        if (map != null && !map.isEmpty() && isLenientProperties()) {
+            if (resolveRawParameterValues()) {
+                // parameters using raw syntax: RAW(value)
+                // should have the token removed, so its only the value we 
have in parameters, as we are about to create
+                // an endpoint and want to have the parameter values without 
the RAW tokens
+                URISupport.resolveRawParameterValues(map);
             }
+            // okay so only add the known properties as they are the non 
lenient properties
+            properties = new LinkedHashMap<>();
+            map.forEach((k, v) -> {
+                if (knownProperties.contains(k)) {
+                    properties.put(k, v);
+                }
+            });
         } else {
-            properties = new LinkedHashMap<>(catalog.endpointProperties(uri));
+            properties = map;
         }
+
         return properties;
     }
 
     public Map<String, Object> endpointLenientProperties(Exchange exchange, 
String uri) throws Exception {
         Map<String, Object> properties;
-        if (isOnlyDynamicQueryParameters()) {
-            // optimize as we know its only query parameters that can be 
dynamic
-            Map<String, Object> map = 
URISupport.parseQuery(URISupport.extractQuery(uri));
-            if (map != null && !map.isEmpty()) {
-                if (resolveRawParameterValues()) {
-                    // parameters using raw syntax: RAW(value)
-                    // should have the token removed, so its only the value we 
have in parameters, as we are about to create
-                    // an endpoint and want to have the parameter values 
without the RAW tokens
-                    URISupport.resolveRawParameterValues(map);
-                }
-                properties = new LinkedHashMap<>();
-                map.forEach((k, v) -> {
-                    if (!knownProperties.contains(k)) {
-                        properties.put(k, v.toString());
-                    }
-                });
-            } else {
-                properties = map;
+        // optimize as we know its only query parameters that can be dynamic
+        Map<String, Object> map = 
URISupport.parseQuery(URISupport.extractQuery(uri));
+        if (map != null && !map.isEmpty()) {
+            if (resolveRawParameterValues()) {
+                // parameters using raw syntax: RAW(value)
+                // should have the token removed, so its only the value we 
have in parameters, as we are about to create
+                // an endpoint and want to have the parameter values without 
the RAW tokens
+                URISupport.resolveRawParameterValues(map);
             }
+            properties = new LinkedHashMap<>();
+            map.forEach((k, v) -> {
+                if (!knownProperties.contains(k)) {
+                    properties.put(k, v.toString());
+                }
+            });
         } else {
-            properties = new 
LinkedHashMap<>(catalog.endpointLenientProperties(uri));
+            properties = map;
         }
         return properties;
     }
 
     public String asEndpointUri(Exchange exchange, String uri, Map<String, 
Object> properties) throws Exception {
-        if (isOnlyDynamicQueryParameters()) {
-            String answer;
-            String query = URISupport.createQueryString(properties, false);
-            int pos = uri.indexOf('?');
-            if (pos != -1) {
-                answer = uri.substring(0, pos) + "?" + query;
-            } else {
-                answer = uri + "?" + query;
-            }
-            return answer;
+        String answer;
+        String query = URISupport.createQueryString(properties, false);
+        int pos = uri.indexOf('?');
+        if (pos != -1) {
+            answer = uri.substring(0, pos) + "?" + query;
         } else {
-            return catalog.asEndpointUri(getScheme(), new 
LinkedHashMap(properties), false);
+            answer = uri + "?" + query;
         }
+        return answer;
     }
+
 }
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_8.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_8.adoc
index c65b180..170fdd2 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_8.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_8.adoc
@@ -6,7 +6,7 @@ from both 3.0 to 3.1 and 3.1 to 3.2.
 
 == Upgrading Camel 3.7 to 3.8
 
-=== API changes in Camel events
+=== API changes
 
 The following type names are renamed in `CamelEvent.Type` enum:
 
@@ -15,6 +15,9 @@ The following type names are renamed in `CamelEvent.Type` 
enum:
 - `CamelContextRoutesStopping` to `RoutesStopping`
 - `CamelContextRoutesStopped` to `RoutesStopped`
 
+The method `isOnlyDynamicQueryParameters` is removed from 
`org.apache.camel.spi.SendDynamicAware` and
+`org.apache.camel.support.component.SendDynamicAwareSupport` classes.
+
 === OnCompletion EIP
 
 The `onCompletion` EIP has fixed it could trigger multiple completions for a 
given `Exchange`

Reply via email to