Repository: camel
Updated Branches:
refs/heads/master 45fd4196f -> 4da8d0ad4
CAMEL-11276: camel-restlet should use {} placeholders instead of () so its
similar to all the other REST components.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4da8d0ad
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4da8d0ad
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4da8d0ad
Branch: refs/heads/master
Commit: 4da8d0ad4472e69a5728f67fa121b3b4150fdc33
Parents: 45fd419
Author: Claus Ibsen <[email protected]>
Authored: Wed May 24 14:11:10 2017 +0200
Committer: Claus Ibsen <[email protected]>
Committed: Wed May 24 14:11:44 2017 +0200
----------------------------------------------------------------------
.../restlet/DefaultRestletBinding.java | 28 +++++++++++++++++---
.../component/restlet/RestletComponent.java | 7 +++++
.../component/restlet/RestletEndpoint.java | 17 ++++++++++++
.../component/restlet/RestletProducer.java | 10 +++++--
.../RestletHttpEmptyQueryParameterTest.java | 2 --
5 files changed, 56 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/4da8d0ad/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java
----------------------------------------------------------------------
diff --git
a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java
b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java
index c4f62b1..0d8d0e2 100644
---
a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java
+++
b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java
@@ -27,12 +27,14 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
+import java.util.Enumeration;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
import javax.xml.transform.dom.DOMSource;
import org.apache.camel.Exchange;
@@ -42,11 +44,14 @@ import org.apache.camel.StringSource;
import org.apache.camel.TypeConverter;
import org.apache.camel.WrappedFile;
import org.apache.camel.component.file.GenericFile;
+import org.apache.camel.http.common.HttpHelper;
+import org.apache.camel.http.common.HttpMessage;
import org.apache.camel.spi.HeaderFilterStrategy;
import org.apache.camel.spi.HeaderFilterStrategyAware;
import org.apache.camel.util.IOHelper;
import org.apache.camel.util.MessageHelper;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.URISupport;
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import org.restlet.Request;
@@ -112,10 +117,7 @@ public class DefaultRestletBinding implements
RestletBinding, HeaderFilterStrate
// copy query string to header
- String query = request.getResourceRef().getQuery();
- if (query != null) {
- inMessage.setHeader(Exchange.HTTP_QUERY, query);
- }
+ populateQueryParameters(request, exchange);
// copy URI to header
inMessage.setHeader(Exchange.HTTP_URI,
request.getResourceRef().getIdentifier(true));
@@ -158,6 +160,24 @@ public class DefaultRestletBinding implements
RestletBinding, HeaderFilterStrate
}
+ protected void populateQueryParameters(Request request, Exchange exchange)
throws Exception {
+ String query = request.getResourceRef().getQuery();
+ if (query != null) {
+ exchange.getIn().setHeader(Exchange.HTTP_QUERY, query);
+
+ // parse query and map to Camel message headers
+ Map<String, Object> map = URISupport.parseQuery(query);
+ for (Map.Entry<String, Object> entry : map.entrySet()) {
+ if
(!headerFilterStrategy.applyFilterToExternalHeaders(entry.getKey(),
entry.getValue(), exchange)) {
+ String key = entry.getKey();
+ Object value = entry.getValue();
+ LOG.trace("HTTP query parameter {} = {}", key, value);
+ exchange.getIn().setHeader(key, value);
+ }
+ }
+ }
+ }
+
public void populateRestletRequestFromExchange(Request request, Exchange
exchange) {
request.setReferrerRef("camel-restlet");
http://git-wip-us.apache.org/repos/asf/camel/blob/4da8d0ad/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
----------------------------------------------------------------------
diff --git
a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
index e40eef1..e2f1b71 100644
---
a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
+++
b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
@@ -198,6 +198,13 @@ public class RestletComponent extends
HeaderFilterStrategyComponent implements R
result.setSslContextParameters(retrieveGlobalSslContextParameters());
}
+ // any additional query parameters from parameters then we need to
include them as well
+ if (!parameters.isEmpty()) {
+ result.setQueryParameters(parameters);
+ endpointUri = URISupport.appendParametersToURI(endpointUri,
parameters);
+ result.setCompleteEndpointUri(endpointUri);
+ }
+
return result;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/4da8d0ad/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletEndpoint.java
----------------------------------------------------------------------
diff --git
a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletEndpoint.java
b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletEndpoint.java
index fb8a3a5..d6e34f7 100644
---
a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletEndpoint.java
+++
b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletEndpoint.java
@@ -87,11 +87,17 @@ public class RestletEndpoint extends DefaultEndpoint
implements AsyncEndpoint, H
private boolean autoCloseStream;
@UriParam(label = "producer")
private CookieHandler cookieHandler;
+ // should NOT be exposes as @UriParam
+ private transient Map<String, Object> queryParameters;
public RestletEndpoint(RestletComponent component, String remaining)
throws Exception {
super(remaining, component);
}
+ public void setCompleteEndpointUri(String uri) {
+ setEndpointUri(uri);
+ }
+
public boolean isSingleton() {
return true;
}
@@ -357,6 +363,17 @@ public class RestletEndpoint extends DefaultEndpoint
implements AsyncEndpoint, H
this.cookieHandler = cookieHandler;
}
+ public Map<String, Object> getQueryParameters() {
+ return queryParameters;
+ }
+
+ /**
+ * Additional query parameters for producer
+ */
+ public void setQueryParameters(Map<String, Object> queryParameters) {
+ this.queryParameters = queryParameters;
+ }
+
@Override
protected void doStart() throws Exception {
if (headerFilterStrategy == null) {
http://git-wip-us.apache.org/repos/asf/camel/blob/4da8d0ad/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java
----------------------------------------------------------------------
diff --git
a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java
b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java
index d0261a5..7efd629 100644
---
a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java
+++
b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java
@@ -17,9 +17,11 @@
package org.apache.camel.component.restlet;
import java.io.IOException;
+import java.io.UnsupportedEncodingException;
import java.net.CookieStore;
import java.net.HttpCookie;
import java.net.URI;
+import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -204,16 +206,20 @@ public class RestletProducer extends DefaultAsyncProducer
{
return false;
}
- private static String buildUri(RestletEndpoint endpoint, Exchange
exchange) throws CamelExchangeException {
+ private static String buildUri(RestletEndpoint endpoint, Exchange
exchange) throws Exception {
// rest producer may provide an override url to be used which we
should discard if using (hence the remove)
String uri = (String)
exchange.getIn().removeHeader(Exchange.REST_HTTP_URI);
if (uri == null) {
uri = endpoint.getProtocol() + "://" + endpoint.getHost() + ":" +
endpoint.getPort() + endpoint.getUriPattern();
}
+ // include any query parameters if needed
+ if (endpoint.getQueryParameters() != null) {
+ uri = URISupport.appendParametersToURI(uri,
endpoint.getQueryParameters());
+ }
// substitute { } placeholders in uri and use mandatory headers
- LOG.trace("Substituting '(value)' placeholders in uri: {}", uri);
+ LOG.trace("Substituting '{value}' placeholders in uri: {}", uri);
Matcher matcher = PATTERN.matcher(uri);
while (matcher.find()) {
String key = matcher.group(1);
http://git-wip-us.apache.org/repos/asf/camel/blob/4da8d0ad/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletHttpEmptyQueryParameterTest.java
----------------------------------------------------------------------
diff --git
a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletHttpEmptyQueryParameterTest.java
b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletHttpEmptyQueryParameterTest.java
index 5b16e07..c756147 100644
---
a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletHttpEmptyQueryParameterTest.java
+++
b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletHttpEmptyQueryParameterTest.java
@@ -17,13 +17,11 @@
package org.apache.camel.component.restlet;
import org.apache.camel.builder.RouteBuilder;
-import org.junit.Ignore;
import org.junit.Test;
/**
* @version
*/
-@Ignore("Need to add support for lenient properties to producer")
public class RestletHttpEmptyQueryParameterTest extends RestletTestSupport {
@Test