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/02/17 09:19:33 UTC

svn commit: r1447001 - in /camel/trunk/components/camel-restlet/src: main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java test/java/org/apache/camel/component/restlet/RestletResponseTest.java

Author: ningjiang
Date: Sun Feb 17 08:19:32 2013
New Revision: 1447001

URL: http://svn.apache.org/r1447001
Log:
CAMEL-6085 provides the cache-control header setting in camel-restlet

Modified:
    camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java
    camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletResponseTest.java

Modified: camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java?rev=1447001&r1=1447000&r2=1447001&view=diff
==============================================================================
--- camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java (original)
+++ camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java Sun Feb 17 08:19:32 2013
@@ -22,8 +22,10 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import javax.xml.transform.dom.DOMSource;
@@ -38,6 +40,7 @@ import org.apache.camel.spi.HeaderFilter
 import org.apache.camel.util.MessageHelper;
 import org.restlet.Request;
 import org.restlet.Response;
+import org.restlet.data.CacheDirective;
 import org.restlet.data.ChallengeResponse;
 import org.restlet.data.ChallengeScheme;
 import org.restlet.data.CharacterSet;
@@ -289,6 +292,8 @@ public class DefaultRestletBinding imple
         MessageHelper.copyHeaders(exchange.getIn(), exchange.getOut(), false);
     }
 
+    
+    @SuppressWarnings("unchecked")
     protected void setResponseHeader(Exchange exchange, org.restlet.Message message, String header, Object value) {
         // put the header first
         message.getAttributes().put(header, value);
@@ -297,9 +302,20 @@ public class DefaultRestletBinding imple
         if (value == null) {
             return;
         }
-
+        
         // special for certain headers
         if (message.getEntity() != null) {
+            if (header.equalsIgnoreCase(HeaderConstants.HEADER_CACHE_CONTROL)) {
+                if (value instanceof List) {
+                    message.setCacheDirectives((List<CacheDirective>) value);
+                }
+                if (value instanceof String) {
+                    List<CacheDirective> list = new ArrayList<CacheDirective>();
+                    // set the cache control value directive
+                    list.add(new CacheDirective((String) value));
+                    message.setCacheDirectives(list);
+                }
+            }
             if (header.equalsIgnoreCase(HeaderConstants.HEADER_EXPIRES)) {
                 if (value instanceof Calendar) {
                     message.getEntity().setExpirationDate(((Calendar) value).getTime());

Modified: camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletResponseTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletResponseTest.java?rev=1447001&r1=1447000&r2=1447001&view=diff
==============================================================================
--- camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletResponseTest.java (original)
+++ camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletResponseTest.java Sun Feb 17 08:19:32 2013
@@ -16,7 +16,9 @@
  */
 package org.apache.camel.component.restlet;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.camel.CamelExecutionException;
@@ -26,6 +28,8 @@ import org.apache.camel.builder.RouteBui
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpPost;
 import org.junit.Test;
+import org.restlet.data.CacheDirective;
+import org.restlet.engine.http.header.HeaderConstants;
 
 /**
  *
@@ -46,17 +50,39 @@ public class RestletResponseTest extends
                         exchange.getOut().setBody("{" + userName + "}");
                         exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, "417");
                         exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "application/JSON");
+                        // set the cache control with String
+                        exchange.getOut().setHeader(HeaderConstants.HEADER_CACHE_CONTROL, "max-age=20");
                     }        
                 });
+                
+                from("restlet:http://localhost:" + portNum + "/cached/{username}?restletMethod=POST").process(new Processor() {
+                    public void process(Exchange exchange) throws Exception {
+                        String userName = exchange.getIn().getHeader("username", String.class);                        
+                        assertNotNull("userName should not be null", userName);
+                        exchange.getOut().setBody("{" + userName + "}");
+                        exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, "417");
+                        exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "application/JSON");
+                        // set cache control with cacheDirectives
+                        List<CacheDirective> cacheDirectives = new ArrayList<CacheDirective>();
+                        cacheDirectives.add(CacheDirective.maxAge(20));
+                        exchange.getOut().setHeader(HeaderConstants.HEADER_CACHE_CONTROL, cacheDirectives);
+                        
+                    }       
+                });
             }
         };
     }
     
+    private void getCustomResponse(String address) throws Exception {
+        HttpResponse response = doExecute(new HttpPost("http://localhost:" + portNum + address));
+        assertHttpResponse(response, 417, "application/JSON");
+        assertEquals("Get a wrong http header", "Cache-Control: max-age=20", response.getFirstHeader(HeaderConstants.HEADER_CACHE_CONTROL).toString());
+    }
+    
     @Test
     public void testCustomResponse() throws Exception {
-        HttpResponse response = doExecute(new HttpPost("http://localhost:" + portNum + "/users/homer"));
-
-        assertHttpResponse(response, 417, "application/JSON");
+        getCustomResponse("/users/homer");
+        getCustomResponse("/cached/homer");
     }
     
     @Test(expected = CamelExecutionException.class)