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 2011/10/25 21:08:13 UTC

svn commit: r1188859 - in /camel/trunk/components/camel-web/src/main: java/org/apache/camel/web/resources/EndpointResource.java webapp/WEB-INF/org/apache/camel/web/resources/EndpointResource.send.ssp

Author: davsclaus
Date: Tue Oct 25 19:08:12 2011
New Revision: 1188859

URL: http://svn.apache.org/viewvc?rev=1188859&view=rev
Log:
CAMEL-4003: Added form to enter headers when sending to endpoint in camel-web. Thanks to Bilgin for the patch.

Modified:
    camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/EndpointResource.java
    camel/trunk/components/camel-web/src/main/webapp/WEB-INF/org/apache/camel/web/resources/EndpointResource.send.ssp

Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/EndpointResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/EndpointResource.java?rev=1188859&r1=1188858&r2=1188859&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/EndpointResource.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/EndpointResource.java Tue Oct 25 19:08:12 2011
@@ -18,9 +18,9 @@ package org.apache.camel.web.resources;
 
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
@@ -32,6 +32,7 @@ import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
 
 import com.sun.jersey.api.representation.Form;
+
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -42,8 +43,6 @@ import org.apache.camel.web.model.Endpoi
 
 /**
  * A Camel <a href="http://camel.apache.org/endpoint.html">Endpoint</a>
- *
- * @version 
  */
 public class EndpointResource extends CamelChildResourceSupport {
     private final String key;
@@ -102,7 +101,8 @@ public class EndpointResource extends Ca
     @POST
     @Consumes({MediaType.TEXT_PLAIN, MediaType.TEXT_HTML, MediaType.TEXT_XML, MediaType.APPLICATION_XML})
     public Response postMessage(@Context HttpHeaders headers, final String body) throws URISyntaxException {
-        sendMessage(headers, body);
+        Map<String, Object> messageHeaders = multivalueMapToMap(headers.getRequestHeaders());
+        sendMessage(messageHeaders, body);
         return Response.ok().build();
     }
 
@@ -113,36 +113,58 @@ public class EndpointResource extends Ca
     @POST
     @Consumes("application/x-www-form-urlencoded")
     public Response postMessageForm(@Context HttpHeaders headers, Form formData) throws URISyntaxException {
-        String body = formData.getFirst("body", String.class);
-        sendMessage(headers, body);
+        String body = getBodyData(formData);
+
+        Map<String, Object> messageHeaders = multivalueMapToMap(headers.getRequestHeaders());
+        messageHeaders.putAll(getHeadersData(formData));
+
+        sendMessage(messageHeaders, body);
         return Response.seeOther(new URI(getHref())).build();
     }
 
-    protected void sendMessage(final HttpHeaders headers, final String body) {
+    private Map<String, Object> getHeadersData(Form formData) {
+        Map<String, Object> headers = new HashMap<String, Object>();
+        Map<String, Object> formMap = multivalueMapToMap(formData);
+        for (Map.Entry<String, Object> entry : formMap.entrySet()) {
+            if (entry.getKey().startsWith("header_")) {
+                headers.put((String) entry.getValue(), getHeaderValueForKey(entry.getKey(), formMap));
+            }
+        }
+        return headers;
+    }
+
+    private Object getHeaderValueForKey(String key, Map<String, Object> headers) {
+        return headers.get("value_" + key);
+    }
+
+    private String getBodyData(Form formData) {
+        return formData.getFirst("body", String.class);
+    }
+
+    private Map<String, Object> multivalueMapToMap(MultivaluedMap<String, String> multivaluedMap) {
+        Map<String, Object> resultMap = new HashMap<String, Object>();
+        if (multivaluedMap != null) {
+            for (Map.Entry<String, List<String>> entry : multivaluedMap.entrySet()) {
+                List<String> values = entry.getValue();
+                int size = values.size();
+                if (size == 1) {
+                    resultMap.put(entry.getKey(), entry.getValue().get(0));
+                } else if (size > 0) {
+                    resultMap.put(entry.getKey(), entry.getValue());
+                }
+            }
+        }
+        return resultMap;
+    }
+
+    protected void sendMessage(final Map<String, Object> headers, final String body) {
         getTemplate().send(endpoint, new Processor() {
             public void process(Exchange exchange) throws Exception {
                 Message in = exchange.getIn();
                 in.setBody(body);
-
-                // lets pass in all the HTTP headers
-                if (headers != null) {
-                    MultivaluedMap<String, String> requestHeaders = headers.getRequestHeaders();
-
-                    Set<Map.Entry<String, List<String>>> entries = requestHeaders.entrySet();
-                    for (Map.Entry<String, List<String>> entry : entries) {
-                        String key = entry.getKey();
-                        List<String> values = entry.getValue();
-                        int size = values.size();
-                        if (size == 1) {
-                            in.setHeader(key, values.get(0));
-                        } else if (size > 0) {
-                            in.setHeader(key, values);
-                        }
-                    }
-                }
+                in.setHeaders(headers);
             }
         });
     }
 
-
 }

Modified: camel/trunk/components/camel-web/src/main/webapp/WEB-INF/org/apache/camel/web/resources/EndpointResource.send.ssp
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/WEB-INF/org/apache/camel/web/resources/EndpointResource.send.ssp?rev=1188859&r1=1188858&r2=1188859&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/webapp/WEB-INF/org/apache/camel/web/resources/EndpointResource.send.ssp (original)
+++ camel/trunk/components/camel-web/src/main/webapp/WEB-INF/org/apache/camel/web/resources/EndpointResource.send.ssp Tue Oct 25 19:08:12 2011
@@ -6,7 +6,16 @@
 <h1>Endpoint: ${it.getUri}</h1>
 
 <form action='${uri(it.getHref)}' method="post" name="sendMessage">
-  <input type="submit" value="Send"> <input type="reset"> <br>
+  <input type="submit" value="Send"> <input type="reset"> <br/>
+
+  <br/>Headers(name : value)<br/>
+  <input type="text" name="header_1"> : <input type="text" name="value_header_1"><br/>
+  <input type="text" name="header_2"> : <input type="text" name="value_header_2"><br/>
+  <input type="text" name="header_3"> : <input type="text" name="value_header_3"><br/>
+  <input type="text" name="header_4"> : <input type="text" name="value_header_4"><br/>
+  <input type="text" name="header_5"> : <input type="text" name="value_header_5"><br/>
+
+  <br/>Body<br/>
   <textarea name="body" rows="30" cols="80"></textarea>
 </form>