You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/05/20 05:07:42 UTC
[03/10] camel git commit: fix for form data
fix for form data
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/38677d2b
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/38677d2b
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/38677d2b
Branch: refs/heads/master
Commit: 38677d2b58855d5949c5996108410bc3f6b108b6
Parents: 96ba1fe
Author: jmandawg <jm...@hotmail.com>
Authored: Tue May 17 20:09:00 2016 -0400
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri May 20 06:56:26 2016 +0200
----------------------------------------------------------------------
.../restlet/DefaultRestletBinding.java | 42 ++++++++++++++------
.../restlet/RestletRouteBuilderAuthTest.java | 3 ++
.../restlet/RestletRouteBuilderTest.java | 33 +++++++++++++--
.../restlet/route/TestRouteBuilder.java | 2 +-
4 files changed, 64 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/38677d2b/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 3ab9d1b..5b72b86 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
@@ -20,6 +20,7 @@ import java.io.File;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.nio.charset.Charset;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -42,8 +43,11 @@ import org.apache.camel.WrappedFile;
import org.apache.camel.component.file.GenericFile;
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.http.NameValuePair;
+import org.apache.http.client.utils.URLEncodedUtils;
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.data.CacheDirective;
@@ -90,19 +94,20 @@ public class DefaultRestletBinding implements RestletBinding, HeaderFilterStrate
if (!headerFilterStrategy.applyFilterToExternalHeaders(entry.getKey(), entry.getValue(), exchange)) {
String key = entry.getKey();
Object value = entry.getValue();
- inMessage.setHeader(key, value);
+ if(HeaderConstants.ATTRIBUTE_HEADERS.equalsIgnoreCase(key)){
+ Series<Header> series = (Series<Header>) value;
+ for(Header header: series){
+ if(!header.getName().equalsIgnoreCase("Content-length")) //Don't set the content length
+ inMessage.setHeader(header.getName(), header.getValue());
+ }
+ }
+ else {
+ inMessage.setHeader(key, value);
+ }
LOG.debug("Populate exchange from Restlet request header: {} value: {}", key, value);
}
}
- // we need to dig a bit to grab the content-type
- Series<Header> series = (Series<Header>) request.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
- if (series != null) {
- String type = series.getFirstValue(Exchange.CONTENT_TYPE, true);
- if (type != null) {
- inMessage.setHeader(Exchange.CONTENT_TYPE, type);
- }
- }
// copy query string to header
String query = request.getResourceRef().getQuery();
@@ -168,10 +173,20 @@ public class DefaultRestletBinding implements RestletBinding, HeaderFilterStrate
// must use string based for forms
String body = exchange.getIn().getBody(String.class);
if (body != null) {
- form.add(body, null);
+ List<NameValuePair> pairs = URLEncodedUtils.parse(body, Charset.forName(IOHelper.getCharsetName(exchange, true)));
+ for(NameValuePair p : pairs){
+ form.add(p.getName(), p.getValue());
+ }
}
}
+ //Get outgoing custom http headers
+ Series<Header> restletHeaders = (Series)request.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
+ if(restletHeaders == null){
+ restletHeaders = new Series<>(Header.class);
+ request.getAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS, restletHeaders);
+ }
+
// login and password are filtered by header filter strategy
String login = exchange.getIn().getHeader(RestletConstants.RESTLET_LOGIN, String.class);
String password = exchange.getIn().getHeader(RestletConstants.RESTLET_PASSWORD, String.class);
@@ -196,14 +211,17 @@ public class DefaultRestletBinding implements RestletBinding, HeaderFilterStrate
if (value instanceof Collection) {
for (Object v : (Collection<?>) value) {
form.add(key, v.toString());
+ restletHeaders.set(key, value.toString());
}
} else {
+ //Add headers to headers and to body
form.add(key, value.toString());
+ restletHeaders.set(key, value.toString());
}
}
} else {
- // For non-form post put all the headers in attributes
- request.getAttributes().put(key, value);
+ // For non-form post put all the headers in custom headers
+ restletHeaders.set(key, value.toString());
}
LOG.debug("Populate Restlet request from exchange header: {} value: {}", key, value);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/38677d2b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderAuthTest.java
----------------------------------------------------------------------
diff --git a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderAuthTest.java b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderAuthTest.java
index ad85fe3..5241a71 100644
--- a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderAuthTest.java
+++ b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderAuthTest.java
@@ -21,8 +21,10 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.camel.CamelExecutionException;
+import org.apache.camel.Exchange;
import org.apache.camel.test.spring.CamelSpringTestSupport;
import org.junit.Test;
+import org.restlet.data.MediaType;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class RestletRouteBuilderAuthTest extends CamelSpringTestSupport {
@@ -36,6 +38,7 @@ public class RestletRouteBuilderAuthTest extends CamelSpringTestSupport {
Map<String, Object> headers = new HashMap<String, Object>();
headers.put(RestletConstants.RESTLET_LOGIN, "admin");
headers.put(RestletConstants.RESTLET_PASSWORD, "foo");
+ headers.put(Exchange.CONTENT_TYPE, MediaType.APPLICATION_XML);
headers.put("id", id);
String response = template.requestBodyAndHeaders(
http://git-wip-us.apache.org/repos/asf/camel/blob/38677d2b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java
----------------------------------------------------------------------
diff --git a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java
index aedba9f..5d614c5 100644
--- a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java
+++ b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java
@@ -17,6 +17,8 @@
package org.apache.camel.component.restlet;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
@@ -75,18 +77,34 @@ public class RestletRouteBuilderTest extends RestletTestSupport {
+ exchange.getIn().getHeader("x"));
}
});
+
+ // Restlet consumer to handler FORM POST method
+ from("restlet:http://localhost:" + portNum + "/login?restletMethod=post").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ exchange.getOut().setBody(
+ "received user: "
+ + exchange.getIn().getHeader("user")
+ + "password: "
+ + exchange.getIn().getHeader("passwd"));
+ }
+ });
}
};
}
@Test
public void testProducer() throws IOException {
- String response = template.requestBody("direct:start", "<order foo='1'/>", String.class);
+ Map<String, Object> headers = new HashMap<String, Object>();
+ headers.put(Exchange.CONTENT_TYPE, MediaType.APPLICATION_XML);
+
+ String response = template.requestBodyAndHeaders("direct:start", "<order foo='1'/>", headers, String.class);
assertEquals("received [<order foo='1'/>] as an order id = " + ID, response);
- response = template.requestBodyAndHeader(
+ headers.put("id", "89531");
+
+ response = template.requestBodyAndHeaders(
"restlet:http://localhost:" + portNum + "/orders?restletMethod=post&foo=bar",
- "<order foo='1'/>", "id", "89531", String.class);
+ "<order foo='1'/>", headers, String.class);
assertEquals("received [<order foo='1'/>] as an order id = " + ID, response);
}
@@ -141,4 +159,13 @@ public class RestletRouteBuilderTest extends RestletTestSupport {
assertEquals(Status.CLIENT_ERROR_NOT_FOUND, response.getStatus());
assertNotNull(response.getEntity().getText());
}
+
+ @Test
+ public void testFormsProducer() throws IOException {
+ Map<String, Object> headers = new HashMap<String, Object>();
+ headers.put(Exchange.CONTENT_TYPE, MediaType.APPLICATION_WWW_FORM);
+
+ String response = template.requestBodyAndHeaders("restlet:http://localhost:" + portNum + "/login?restletMethod=post", "user=jaymandawg&passwd=secret$%", headers, String.class);
+ assertEquals("received user: jaymandawgpassword: secret$%", response);
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/38677d2b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/route/TestRouteBuilder.java
----------------------------------------------------------------------
diff --git a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/route/TestRouteBuilder.java b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/route/TestRouteBuilder.java
index b62ddc6..fb30b82 100644
--- a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/route/TestRouteBuilder.java
+++ b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/route/TestRouteBuilder.java
@@ -38,7 +38,7 @@ public class TestRouteBuilder extends RouteBuilder {
from("restlet:http://localhost:" + port + "/securedOrders?restletMethod=post&restletRealm=#realm").process(new Processor() {
public void process(Exchange exchange) throws Exception {
exchange.getOut().setBody(
- "received [" + exchange.getIn().getBody()
+ "received [" + exchange.getIn().getBody(String.class)
+ "] as an order id = "
+ exchange.getIn().getHeader("id"));
}