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 <ningji...@apache.org> Authored: Tue Oct 8 13:15:46 2013 +0800 Committer: Willem Jiang <ningji...@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)); } }; }