You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ch...@apache.org on 2007/09/26 19:07:20 UTC

svn commit: r579718 - in /activemq/camel/trunk/components: camel-http/src/main/java/org/apache/camel/component/http/ camel-jetty/src/main/java/org/apache/camel/component/jetty/ camel-jetty/src/test/java/org/apache/camel/component/jetty/

Author: chirino
Date: Wed Sep 26 10:07:18 2007
New Revision: 579718

URL: http://svn.apache.org/viewvc?rev=579718&view=rev
Log:
Fix for https://issues.apache.org/activemq/browse/CAMEL-158

Modified:
    activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
    activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpBinding.java
    activemq/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
    activemq/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
    activemq/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java

Modified: activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java?rev=579718&r1=579717&r2=579718&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java (original)
+++ activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java Wed Sep 26 10:07:18 2007
@@ -57,7 +57,7 @@
             // protocol exchanges.
 
             // now lets output to the response
-            consumer.getBinding().writeResponse(exchange);
+            consumer.getBinding().writeResponse(exchange, response);
 
         } catch (Exception e) {
             throw new ServletException(e);

Modified: activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpBinding.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpBinding.java?rev=579718&r1=579717&r2=579718&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpBinding.java (original)
+++ activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpBinding.java Wed Sep 26 10:07:18 2007
@@ -17,8 +17,13 @@
 package org.apache.camel.component.http;
 
 import java.io.IOException;
+import java.io.InputStream;
 
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.camel.Message;
 
 /**
  * @version $Revision$
@@ -26,10 +31,43 @@
 public class HttpBinding {
 
     /**
-     * Writes the  exchange to the servlet response
+     * Writes the exchange to the servlet response
+     * 
+     * @param response
+     * @throws IOException
      */
-    public void writeResponse(HttpExchange exchange) {
-        /** TODO */
+    public void writeResponse(HttpExchange exchange, HttpServletResponse response) throws IOException {
+        Message out = exchange.getOut();
+        if (out != null) {
+            
+            // Write out the headers...
+            for (String key : out.getHeaders().keySet()) {
+                String value = out.getHeader(key, String.class);
+                if (value != null) {
+                    response.setHeader(key, value);
+                }
+            }
+            
+            // Write out the body.
+            if (out.getBody() != null) {
+
+                // Try to stream the body since that would be the most
+                // efficient..
+                InputStream is = out.getBody(InputStream.class);
+                if (is != null) {
+                    ServletOutputStream os = response.getOutputStream();
+                    int c;
+                    while ((c = is.read()) >= 0) {
+                        os.write(c);
+                    }
+                } else {
+                    String data = out.getBody(String.class);
+                    if (data != null) {
+                        response.getWriter().print(data);
+                    }
+                }
+            }
+        }
     }
 
     /**

Modified: activemq/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java?rev=579718&r1=579717&r2=579718&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java (original)
+++ activemq/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java Wed Sep 26 10:07:18 2007
@@ -88,14 +88,14 @@
                 // protocol exchanges.
 
                 // now lets output to the response
-                consumer.getBinding().writeResponse(exchange);
+                consumer.getBinding().writeResponse(exchange, response);
                 return;
             }
             
             if (continuation.isResumed() ) {
                 HttpExchange exchange = (HttpExchange)continuation.getObject();
                 // now lets output to the response
-                consumer.getBinding().writeResponse(exchange);
+                consumer.getBinding().writeResponse(exchange, response);
                 return;
             }
 

Modified: activemq/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java?rev=579718&r1=579717&r2=579718&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java (original)
+++ activemq/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java Wed Sep 26 10:07:18 2007
@@ -97,6 +97,7 @@
                 getServer().addConnector(connector);
                 connector.start();
                 connectorRef = new ConnectorRef(connector);
+                connectors.put(connectorKey, connectorRef);
             } else {
                 // ref track the connector
                 connectorRef.increment();

Modified: activemq/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java?rev=579718&r1=579717&r2=579718&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java (original)
+++ activemq/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java Wed Sep 26 10:07:18 2007
@@ -16,13 +16,17 @@
  */
 package org.apache.camel.component.jetty;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
+import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 
@@ -53,6 +57,20 @@
         assertTrue("Should be more than one header but was: " + headers, headers.size() > 0);
     }
 
+    public void testHelloEndpoint() throws Exception {
+
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        InputStream is = new URL("http://localhost:8080/hello").openStream();
+        int c;
+        while ((c = is.read()) >= 0) {
+            os.write(c);
+        }
+
+        String data = new String(os.toByteArray());
+        assertEquals("<b>Hello World</b>", data);
+        
+    }
+    
     protected void invokeHttpEndpoint() throws IOException {
         template.sendBodyAndHeader("http://localhost:8080/test", expectedBody, "Content-Type", "application/xml");
     }
@@ -62,6 +80,13 @@
         return new RouteBuilder() {
             public void configure() {
                 from("jetty:http://localhost:8080/test").to("mock:a");
+
+                Processor proc = new Processor() {
+                    public void process(Exchange exchange) throws Exception {
+                        exchange.getOut(true).setBody("<b>Hello World</b>");
+                    }
+                };
+                from("jetty:http://localhost:8080/hello").process(proc);
             }
         };
     }