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