You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2013/10/08 09:10:09 UTC
[3/7] git commit: CAMEL-6834 camel-restlet supports to send the
Representation object back
CAMEL-6834 camel-restlet supports to send the Representation object back
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b9d5b892
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b9d5b892
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b9d5b892
Branch: refs/heads/camel-2.12.x
Commit: b9d5b8925b34c5acb10e87aea6b9b13fb15cae1c
Parents: 196fe19
Author: Willem Jiang <ni...@apache.org>
Authored: Tue Oct 8 13:15:46 2013 +0800
Committer: Willem Jiang <ni...@apache.org>
Committed: Tue Oct 8 15:00:09 2013 +0800
----------------------------------------------------------------------
.../restlet/DefaultRestletBinding.java | 3 ++
.../component/restlet/RestletSetBodyTest.java | 42 ++++++++++++++++++++
2 files changed, 45 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/b9d5b892/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 3a7a9ae..f84511e 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
@@ -52,6 +52,7 @@ import org.restlet.data.Status;
import org.restlet.engine.header.HeaderConstants;
import org.restlet.representation.FileRepresentation;
import org.restlet.representation.InputRepresentation;
+import org.restlet.representation.Representation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -230,6 +231,8 @@ public class DefaultRestletBinding implements RestletBinding, HeaderFilterStrate
} else if (body instanceof Response) {
// its already a restlet response, so dont do anything
LOG.debug("Using existing Restlet Response from exchange body: {}", body);
+ } else if (body instanceof Representation) {
+ response.setEntity(out.getBody(Representation.class));
} else if (body instanceof InputStream) {
response.setEntity(new InputRepresentation(out.getBody(InputStream.class), mediaType));
} else if (body instanceof File) {
http://git-wip-us.apache.org/repos/asf/camel/blob/b9d5b892/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletSetBodyTest.java
----------------------------------------------------------------------
diff --git a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletSetBodyTest.java b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletSetBodyTest.java
index bb2ec77..a436ec5 100644
--- a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletSetBodyTest.java
+++ b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletSetBodyTest.java
@@ -16,8 +16,17 @@
*/
package org.apache.camel.component.restlet;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
import org.apache.camel.builder.RouteBuilder;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.DefaultHttpClient;
import org.junit.Test;
+import org.restlet.data.MediaType;
+import org.restlet.representation.InputRepresentation;
/**
* @version
@@ -29,6 +38,31 @@ public class RestletSetBodyTest extends RestletTestSupport {
String response = template.requestBody("restlet:http://0.0.0.0:" + portNum + "/stock/ORCL?restletMethod=get", null, String.class);
assertEquals("110", response);
}
+
+ @Test
+ public void testSetBodyRepresentation() throws Exception {
+ HttpGet get = new HttpGet("http://0.0.0.0:" + portNum + "/images/123");
+ HttpClient httpclient = new DefaultHttpClient();
+ InputStream is = null;
+ try {
+ HttpResponse response = httpclient.execute(get);
+ assertEquals(200, response.getStatusLine().getStatusCode());
+ assertEquals("image/png", response.getEntity().getContentType().getValue());
+ is = response.getEntity().getContent();
+ assertEquals("Get wrong available size", 10, is.available());
+ byte[] buffer = new byte[10];
+ is.read(buffer);
+ for (int i = 0; i < 10; i++) {
+ assertEquals(i + 1, buffer[i]);
+ }
+ } finally {
+ httpclient.getConnectionManager().shutdown();
+ if (is != null) {
+ is.close();
+ }
+ }
+ }
+
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
@@ -37,6 +71,14 @@ public class RestletSetBodyTest extends RestletTestSupport {
public void configure() throws Exception {
from("restlet:http://0.0.0.0:" + portNum + "/stock/{symbol}?restletMethods=get")
.setBody().constant("110");
+ // create ByteArrayRepresentation for response
+ byte[] image = new byte[10];
+ for (int i = 0; i < 10; i++) {
+ image[i] = (byte)(i + 1);
+ }
+ ByteArrayInputStream inputStream = new ByteArrayInputStream(image);
+ from("restlet:http://0.0.0.0:" + portNum + "/images/{symbol}?restletMethods=get")
+ .setBody().constant(new InputRepresentation(inputStream, MediaType.IMAGE_PNG, 10));
}
};
}