This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit e606c8275083e7e9c936c489155ebf5268f1d27c Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri Jan 21 16:08:59 2022 +0100 CAMEL-17531: A better and general fix for CAMEL-17521 without hardcoding the prefix. --- .../camel/component/http/HttpSendDynamicAware.java | 17 ----------------- .../support/component/SendDynamicAwareSupport.java | 14 +++++++++++--- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpSendDynamicAware.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpSendDynamicAware.java index 4f21e58..7e76c0d 100644 --- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpSendDynamicAware.java +++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpSendDynamicAware.java @@ -16,26 +16,9 @@ */ package org.apache.camel.component.http; -import java.util.LinkedHashMap; -import java.util.Map; - -import org.apache.camel.Exchange; import org.apache.camel.spi.annotations.SendDynamic; @SendDynamic("http,https") public class HttpSendDynamicAware extends org.apache.camel.http.base.HttpSendDynamicAware { - @Override - public Map<String, Object> endpointLenientProperties(Exchange exchange, String uri) throws Exception { - Map<String, Object> answer = new LinkedHashMap<>(); - - // workaround as we need to remove all prefix options as they are not part of lenient properties - Map<String, Object> properties = super.endpointLenientProperties(exchange, uri); - properties.forEach((k, v) -> { - if (!k.startsWith("httpClient.")) { - answer.put(k, v); - } - }); - return answer; - } } 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 a868dcd..0120ef9 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 @@ -35,6 +35,7 @@ public abstract class SendDynamicAwareSupport extends ServiceSupport implements private CamelContext camelContext; private Set<String> knownProperties; + private Set<String> knownPrefixes; private String scheme; @Override @@ -64,13 +65,14 @@ public abstract class SendDynamicAwareSupport extends ServiceSupport implements @Override protected void doInit() throws Exception { - if (knownProperties == null) { - // optimize to eager load the list of known properties + if (knownProperties == null || knownPrefixes == null) { + // optimize to eager load the list of known properties/prefixes EndpointUriFactory factory = getCamelContext().adapt(ExtendedCamelContext.class).getEndpointUriFactory(getScheme()); if (factory == null) { throw new IllegalStateException("Cannot find EndpointUriFactory for component: " + getScheme()); } knownProperties = factory.propertyNames(); + knownPrefixes = factory.multiValuePrefixes(); } } @@ -112,7 +114,13 @@ public abstract class SendDynamicAwareSupport extends ServiceSupport implements } properties = new LinkedHashMap<>(); map.forEach((k, v) -> { - if (!knownProperties.contains(k)) { + // we only accept if the key is not an existing known property + // or that the key is not from a multi-value (prefix) + boolean accept = !knownProperties.contains(k); + if (accept && !knownPrefixes.isEmpty()) { + accept = knownPrefixes.stream().noneMatch(k::startsWith); + } + if (accept) { properties.put(k, v.toString()); } });