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 <davscl...@apache.org>
Authored: Wed May 24 14:11:10 2017 +0200
Committer: Claus Ibsen <davscl...@apache.org>
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

Reply via email to