Skip to content

Commit

Permalink
CAMEL-11276: camel-restlet should use {} placeholders instead of () s…
Browse files Browse the repository at this point in the history
…o its similar to all the other REST components.
  • Loading branch information
davsclaus committed May 24, 2017
1 parent 45fd419 commit 4da8d0a
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 8 deletions.
Expand Up @@ -27,12 +27,14 @@
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;
Expand All @@ -42,11 +44,14 @@
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;
Expand Down Expand Up @@ -112,10 +117,7 @@ public void populateExchangeFromRestletRequest(Request request, Response respons


// 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));
Expand Down Expand Up @@ -158,6 +160,24 @@ public void populateExchangeFromRestletRequest(Request request, Response respons

}

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");

Expand Down
Expand Up @@ -198,6 +198,13 @@ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Obje
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;
}

Expand Down
Expand Up @@ -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;
}
Expand Down Expand Up @@ -357,6 +363,17 @@ public void setCookieHandler(CookieHandler cookieHandler) {
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) {
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -204,16 +206,20 @@ public void handle(Request request, Response response) {
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);
Expand Down
Expand Up @@ -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
Expand Down

0 comments on commit 4da8d0a

Please sign in to comment.