This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new c5930d3 default-component: add an option to control if RAW values
need to be resolved when computing endpoint parameters
c5930d3 is described below
commit c5930d3bf811f8fb52669e435cc63a56de12a61c
Author: Luca Burgazzoli <[email protected]>
AuthorDate: Tue Nov 24 10:39:23 2020 +0100
default-component: add an option to control if RAW values need to be
resolved when computing endpoint parameters
---
.../apache/camel/support/DefaultComponentTest.java | 104 +++++++++++++++++++++
.../org/apache/camel/support/DefaultComponent.java | 24 ++++-
2 files changed, 124 insertions(+), 4 deletions(-)
diff --git
a/core/camel-core/src/test/java/org/apache/camel/support/DefaultComponentTest.java
b/core/camel-core/src/test/java/org/apache/camel/support/DefaultComponentTest.java
new file mode 100644
index 0000000..9e92738
--- /dev/null
+++
b/core/camel-core/src/test/java/org/apache/camel/support/DefaultComponentTest.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.support;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class DefaultComponentTest extends ContextTestSupport {
+ @Test
+ public void testResolveRawDefault() {
+ context.addComponent("dummy", new MyComponent());
+ MyEndpoint endpoint =
context.getEndpoint("dummy:test?test=RAW(value)", MyEndpoint.class);
+ assertEquals("value", endpoint.getParameters().get("test"));
+ }
+
+ @Test
+ public void testResolveRawTrue() {
+ context.addComponent("dummy", new MyComponent(true));
+ MyEndpoint endpoint =
context.getEndpoint("dummy:test?test=RAW(value)", MyEndpoint.class);
+ assertEquals("value", endpoint.getParameters().get("test"));
+ }
+
+ @Test
+ public void testResolveRawFalse() {
+ context.addComponent("dummy", new MyComponent(false));
+ MyEndpoint endpoint =
context.getEndpoint("dummy:test?test=RAW(value)", MyEndpoint.class);
+ assertEquals("RAW(value)", endpoint.getParameters().get("test"));
+ }
+
+ private static class MyComponent extends DefaultComponent {
+ private final Boolean raw;
+
+ public MyComponent() {
+ this(null);
+ }
+
+ public MyComponent(Boolean raw) {
+ this.raw = raw;
+ }
+
+ @Override
+ protected Endpoint createEndpoint(String uri, String remaining,
Map<String, Object> parameters) throws Exception {
+ MyEndpoint answer = new MyEndpoint(parameters);
+ parameters.clear();
+
+ return answer;
+ }
+
+ @Override
+ protected boolean resolveRawParameterValues() {
+ return raw != null ? raw : super.resolveRawParameterValues();
+ }
+ }
+
+ private static class MyEndpoint extends DefaultEndpoint {
+ private final Map<String, Object> parameters;
+
+ public MyEndpoint(Map<String, Object> parameters) {
+ this.parameters = new HashMap<>(parameters);
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ return null;
+ }
+
+ @Override
+ public Consumer createConsumer(Processor processor) throws Exception {
+ return null;
+ }
+
+ @Override
+ public boolean isSingleton() {
+ return false;
+ }
+
+ public Map<String, Object> getParameters() {
+ return parameters;
+ }
+ }
+}
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java
b/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java
index 03f11d3..6df994b 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java
@@ -127,10 +127,13 @@ public abstract class DefaultComponent extends
ServiceSupport implements Compone
}
// This special property is only to identify endpoints in a unique
manner
parameters.remove("hash");
- // 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(parameters);
+
+ 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(parameters);
+ }
// use encoded or raw uri?
uri = useRawUri() ? uri : encodedUri;
@@ -327,6 +330,19 @@ public abstract class DefaultComponent extends
ServiceSupport implements Compone
}
}
+ /**
+ * Configure if the parameters using the RAW token syntax need to be
resolved before being consumed by
+ * {@link #createEndpoint(String, Map)}.
+ * <p/>
+ * As the parameters are used to create an endpoint, by default they
should have the token removed so its only the
+ * value we have in parameters however there are some cases where the
endpoint may act as a proxy for another
+ * endpoint and you need to preserve the values as they are.
+ */
+ protected boolean resolveRawParameterValues() {
+ // should resolve raw parameters by default
+ return true;
+ }
+
@Override
public CamelContext getCamelContext() {
return camelContext;