You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2009/02/18 13:29:46 UTC

svn commit: r745494 - in /camel/trunk/components/camel-web/src/main: java/org/apache/camel/rest/resources/ webapp/org/apache/camel/rest/resources/EndpointResource/

Author: jstrachan
Date: Wed Feb 18 12:29:46 2009
New Revision: 745494

URL: http://svn.apache.org/viewvc?rev=745494&view=rev
Log:
added a simple send message ability

Added:
    camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/send.jsp   (contents, props changed)
      - copied, changed from r745452, camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/index.jsp
Modified:
    camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/CamelContextResource.java
    camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/EndpointResource.java
    camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/index.jsp

Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/CamelContextResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/CamelContextResource.java?rev=745494&r1=745493&r2=745494&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/CamelContextResource.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/CamelContextResource.java Wed Feb 18 12:29:46 2009
@@ -23,6 +23,7 @@
 import com.sun.jersey.spi.resource.Singleton;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
+import org.apache.camel.ProducerTemplate;
 import org.apache.camel.model.RouteType;
 import org.apache.camel.model.RoutesType;
 import org.apache.camel.rest.model.Camel;
@@ -36,6 +37,7 @@
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
+import javax.annotation.PreDestroy;
 import java.util.List;
 
 
@@ -50,9 +52,12 @@
 public class CamelContextResource {
 
     private CamelContext camelContext;
+    private ProducerTemplate template;
 
-    public CamelContextResource(@Inject CamelContext camelContext) {
+    public CamelContextResource(@Inject CamelContext camelContext) throws Exception {
         this.camelContext = camelContext;
+        this.template = camelContext.createProducerTemplate();
+        template.start();
     }
 
     public CamelContext getCamelContext() {
@@ -63,6 +68,13 @@
         return camelContext.getName();
     }
 
+    @PreDestroy
+    public void close() throws Exception {
+        if (template != null) {
+            template.stop();
+        }
+    }
+
     // XML / JSON representations
     //-------------------------------------------------------------------------
 
@@ -99,7 +111,7 @@
         // TODO lets assume the ID is the endpoint
         Endpoint endpoint = getCamelContext().getEndpoint(id);
         if (endpoint != null) {
-            return new EndpointResource(endpoint);
+            return new EndpointResource(camelContext, template, endpoint);
         } else {
             return null;
         }

Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/EndpointResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/EndpointResource.java?rev=745494&r1=745493&r2=745494&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/EndpointResource.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/rest/resources/EndpointResource.java Wed Feb 18 12:29:46 2009
@@ -16,20 +16,45 @@
  */
 package org.apache.camel.rest.resources;
 
+import com.sun.jersey.api.representation.Form;
+import com.sun.jersey.api.view.ImplicitProduces;
+import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.ProducerTemplate;
 import org.apache.camel.rest.model.EndpointLink;
-import com.sun.jersey.api.view.ImplicitProduces;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * @version $Revision$
  */
-@ImplicitProduces({MediaType.TEXT_HTML})
+@ImplicitProduces(Constants.HTML_MIME_TYPES)
 public class EndpointResource {
+    private final CamelContext camelContext;
     private final Endpoint endpoint;
+    private final ProducerTemplate template;
+
+    @Context
+    HttpHeaders headers;
+
 
-    public EndpointResource(Endpoint endpoint) {
+    public EndpointResource(CamelContext camelContext, ProducerTemplate template, Endpoint endpoint) {
+        this.camelContext = camelContext;
+        this.template = template;
         this.endpoint = endpoint;
     }
 
@@ -40,4 +65,53 @@
     public String getUri() {
         return endpoint.getEndpointUri();
     }
+
+    public ProducerTemplate getTemplate() {
+        return template;
+    }
+
+    @POST
+    @Consumes({MediaType.TEXT_PLAIN, MediaType.TEXT_HTML, MediaType.TEXT_XML, MediaType.APPLICATION_XML})
+    public Response postMessage(final String body) throws URISyntaxException {
+        sendMessage(body);
+        return Response.ok().build();
+    }
+
+    @POST
+    @Consumes("application/x-www-form-urlencoded")
+    public Response processForm(Form formData) throws URISyntaxException {
+        System.out.println("Received form! " + formData);
+        String body = formData.getFirst("text", String.class);
+        sendMessage(body);
+        return Response.seeOther(new URI(getHref())).build();
+    }
+
+    protected void sendMessage(final String body) {
+        System.out.println("Sending to " + endpoint + " body: " + body);
+
+        template.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);
+                        }
+                    }
+                }
+            }
+        });
+    }
+
+
 }

Modified: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/index.jsp
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/index.jsp?rev=745494&r1=745493&r2=745494&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/index.jsp (original)
+++ camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/index.jsp Wed Feb 18 12:29:46 2009
@@ -7,5 +7,9 @@
 
         <h1>Endpoint: ${it.uri}</h1>
 
+
+        <ul>
+          <li><a href="${it.href}/send">Send to this endpoint</a></li>
+        </ul>
     </body>
 </html>

Copied: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/send.jsp (from r745452, camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/index.jsp)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/send.jsp?p2=camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/send.jsp&p1=camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/index.jsp&r1=745452&r2=745494&rev=745494&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/index.jsp (original)
+++ camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/send.jsp Wed Feb 18 12:29:46 2009
@@ -1,11 +1,16 @@
 <html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>Endpoint ${it.uri}</title>
-    </head>
-    <body>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <title>Endpoint ${it.uri}</title>
+</head>
+<body>
 
-        <h1>Endpoint: ${it.uri}</h1>
+<h1>Endpoint: ${it.uri}</h1>
 
-    </body>
+<form action="${it.href}" method="post">
+  <input type="submit" value="Send"> <input type="reset"> <br>
+  <textarea name="text" rows="30" cols="80"></textarea>
+</form>
+
+</body>
 </html>

Propchange: camel/trunk/components/camel-web/src/main/webapp/org/apache/camel/rest/resources/EndpointResource/send.jsp
------------------------------------------------------------------------------
    svn:eol-style = native