You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zr...@apache.org on 2017/04/06 13:03:28 UTC
camel git commit: CAMEL-11116 Better handling of query parameters...
Repository: camel
Updated Branches:
refs/heads/master 6a97606f0 -> 0bba43e55
CAMEL-11116 Better handling of query parameters...
... in RestProducer
This changes the way `queryParameters` producer endpoint parameter is
determined, now component/endpoint parameters are not a part of the
query string making sure that any query parameters explicitly set via
`queryParameters` endpoint property are combined.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/0bba43e5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0bba43e5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0bba43e5
Branch: refs/heads/master
Commit: 0bba43e55023d5a2498175bc59949505f983a156
Parents: 6a97606
Author: Zoran Regvart <zr...@apache.org>
Authored: Thu Apr 6 15:02:55 2017 +0200
Committer: Zoran Regvart <zr...@apache.org>
Committed: Thu Apr 6 15:03:12 2017 +0200
----------------------------------------------------------------------
.../camel/component/rest/RestComponent.java | 17 ++++--
.../camel/component/rest/RestEndpointTest.java | 55 ++++++++++++++++----
2 files changed, 59 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/0bba43e5/camel-core/src/main/java/org/apache/camel/component/rest/RestComponent.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/rest/RestComponent.java b/camel-core/src/main/java/org/apache/camel/component/rest/RestComponent.java
index deee394..567d315 100644
--- a/camel-core/src/main/java/org/apache/camel/component/rest/RestComponent.java
+++ b/camel-core/src/main/java/org/apache/camel/component/rest/RestComponent.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.rest;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Supplier;
@@ -32,6 +33,8 @@ import org.apache.camel.util.CamelContextHelper;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.IntrospectionSupport;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.StringHelper;
+import org.apache.camel.util.URISupport;
/**
* Rest component.
@@ -73,12 +76,18 @@ public class RestComponent extends DefaultComponent {
}
answer.setHost(h);
- String query = ObjectHelper.after(uri, "?");
- if (query != null) {
- answer.setQueryParameters(query);
+ setProperties(answer, parameters);
+ if (!parameters.isEmpty()) {
+ // 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);
+ final Map<String, Object> existingQueryParameters = URISupport.parseQuery(answer.getQueryParameters());
+ queryParameters.putAll(existingQueryParameters);
+
+ final String remainingParameters = URISupport.createQueryString(queryParameters);
+ answer.setQueryParameters(remainingParameters);
}
- setProperties(answer, parameters);
answer.setParameters(parameters);
if (!remaining.contains(":")) {
http://git-wip-us.apache.org/repos/asf/camel/blob/0bba43e5/camel-core/src/test/java/org/apache/camel/component/rest/RestEndpointTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/RestEndpointTest.java b/camel-core/src/test/java/org/apache/camel/component/rest/RestEndpointTest.java
index 7cebed0..a889811 100644
--- a/camel-core/src/test/java/org/apache/camel/component/rest/RestEndpointTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/rest/RestEndpointTest.java
@@ -29,31 +29,39 @@ import org.apache.camel.spi.RestProducerFactory;
import org.junit.Assert;
import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
public class RestEndpointTest {
public static class MockRest extends DefaultComponent implements RestProducerFactory {
@Override
- public Producer createProducer(CamelContext camelContext, String host, String verb, String basePath,
- String uriTemplate, String queryParameters, String consumes, String produces,
- Map<String, Object> parameters) throws Exception {
+ public Producer createProducer(final CamelContext camelContext, final String host, final String verb,
+ final String basePath, final String uriTemplate, final String queryParameters, final String consumes,
+ final String produces, final Map<String, Object> parameters) throws Exception {
return null;
}
@Override
- protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters)
- throws Exception {
+ protected Endpoint createEndpoint(final String uri, final String remaining,
+ final Map<String, Object> parameters) throws Exception {
return null;
}
}
- @Test
- public void shouldConfigureBindingMode() throws Exception {
- final CamelContext context = new DefaultCamelContext();
+ RestComponent restComponent;
+
+ CamelContext context;
+
+ public RestEndpointTest() {
+ context = new DefaultCamelContext();
context.addComponent("mock-rest", new MockRest());
- final RestComponent restComponent = new RestComponent();
+ restComponent = new RestComponent();
restComponent.setCamelContext(context);
+ }
+ @Test
+ public void shouldConfigureBindingMode() throws Exception {
final RestEndpoint restEndpoint = new RestEndpoint("rest:GET:/path", restComponent);
restEndpoint.setComponentName("mock-rest");
restEndpoint.setParameters(new HashMap<>());
@@ -64,4 +72,33 @@ public class RestEndpointTest {
Assert.assertEquals(producer.getBindingMode(), RestBindingMode.json);
}
+
+ @Test
+ public void shouldCreateQueryParametersFromUnusedEndpointParameters() throws Exception {
+ final Map<String, Object> parameters = new HashMap<>();
+ parameters.put("host", "http://localhost");
+ parameters.put("bindingMode", "json");
+ parameters.put("foo", "bar");
+
+ final RestEndpoint endpoint = (RestEndpoint) restComponent
+ .createEndpoint("rest:GET:/path?host=http://localhost&bindingMode=json&foo=bar", "GET:/path", parameters);
+
+ assertEquals("http://localhost", endpoint.getHost());
+ assertEquals(RestBindingMode.json, endpoint.getBindingMode());
+ assertEquals("GET", endpoint.getMethod());
+ assertEquals("/path", endpoint.getPath());
+ assertEquals("foo=bar", endpoint.getQueryParameters());
+ }
+
+ @Test
+ public void shouldSupportQueryParametersSetViaEndpointUri() throws Exception {
+ RestEndpoint endpoint = (RestEndpoint) context.getComponent("rest").createEndpoint(
+ "rest:GET:/path?host=http://localhost&bindingMode=json&foo=bar&queryParameters=RAW(a%3Db%26c%3Dd)");
+
+ assertEquals("http://localhost", endpoint.getHost());
+ assertEquals(RestBindingMode.json, endpoint.getBindingMode());
+ assertEquals("GET", endpoint.getMethod());
+ assertEquals("/path", endpoint.getPath());
+ assertEquals("foo=bar&a=b&c=d", endpoint.getQueryParameters());
+ }
}