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 2013/04/30 14:52:26 UTC

svn commit: r1477602 - in /camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http: DefaultNettyHttpBinding.java NettyHttpBinding.java NettyHttpComponent.java NettyHttpMessage.java

Author: davsclaus
Date: Tue Apr 30 12:52:26 2013
New Revision: 1477602

URL: http://svn.apache.org/r1477602
Log:
CAMEL-6327: More work on new camel-netty-http component.

Modified:
    camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
    camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpBinding.java
    camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
    camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpMessage.java

Modified: camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java?rev=1477602&r1=1477601&r2=1477602&view=diff
==============================================================================
--- camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java (original)
+++ camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java Tue Apr 30 12:52:26 2013
@@ -34,12 +34,15 @@ import org.jboss.netty.handler.codec.htt
 import org.jboss.netty.handler.codec.http.HttpResponse;
 import org.jboss.netty.handler.codec.http.HttpResponseStatus;
 import org.jboss.netty.handler.codec.http.HttpVersion;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Default {@link NettyHttpBinding}.
  */
 public class DefaultNettyHttpBinding implements NettyHttpBinding {
 
+    private static final Logger LOG = LoggerFactory.getLogger(DefaultNettyHttpBinding.class);
     private HeaderFilterStrategy headerFilterStrategy;
 
     public DefaultNettyHttpBinding() {
@@ -51,12 +54,28 @@ public class DefaultNettyHttpBinding imp
 
     @Override
     public Message toCamelMessage(HttpRequest request, Exchange exchange) throws Exception {
-        NettyHttpMessage answer = new NettyHttpMessage(request);
-        answer.setHeader(Exchange.HTTP_METHOD, request.getMethod().getName());
-        answer.setHeader(Exchange.HTTP_URI, request.getUri());
+        LOG.trace("toCamelMessage: {}", request);
 
-        // populate the headers from the request
-        Map<String, Object> headers = answer.getHeaders();
+        NettyHttpMessage answer = new NettyHttpMessage(request, this);
+        // force getting headers which will populate them
+        answer.getHeaders();
+
+        // keep the body as is, and use type converters
+        answer.setBody(request.getContent());
+        return answer;
+    }
+
+    @Override
+    public void populateCamelHeaders(HttpRequest request, Map<String, Object> headers, Exchange exchange) throws Exception {
+        LOG.trace("populateCamelHeaders: {}", request);
+
+        headers.put(Exchange.HTTP_METHOD, request.getMethod().getName());
+        headers.put(Exchange.HTTP_URI, request.getUri());
+
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("HTTP-Method {}", request.getMethod().getName());
+            LOG.trace("HTTP-Uri {}", request.getUri());
+        }
 
         for (String name : request.getHeaderNames()) {
             // mapping the content-type
@@ -68,24 +87,23 @@ public class DefaultNettyHttpBinding imp
             Iterator<?> it = ObjectHelper.createIterator(values);
             while (it.hasNext()) {
                 Object extracted = it.next();
+                LOG.trace("HTTP-header: {}", extracted);
                 if (headerFilterStrategy != null
                         && !headerFilterStrategy.applyFilterToExternalHeaders(name, extracted, exchange)) {
                     NettyHttpHelper.appendHeader(headers, name, extracted);
                 }
             }
         }
-
-        // keep the body as is, and use type converters
-        answer.setBody(request.getContent());
-        return answer;
     }
 
     @Override
     public HttpResponse fromCamelMessage(Message message) throws Exception {
+        LOG.trace("fromCamelMessage: {}", message);
 
         // the status code is default 200, but a header can override that
         Integer code = message.getHeader(Exchange.HTTP_RESPONSE_CODE, 200, Integer.class);
         HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.valueOf(code));
+        LOG.trace("HTTP Status Code: {}", code);
 
         TypeConverter tc = message.getExchange().getContext().getTypeConverter();
 
@@ -100,6 +118,7 @@ public class DefaultNettyHttpBinding imp
                 String headerValue = tc.convertTo(String.class, it.next());
                 if (headerValue != null && headerFilterStrategy != null
                         && !headerFilterStrategy.applyFilterToCamelHeaders(key, headerValue, message.getExchange())) {
+                    LOG.trace("HTTP-Header: {}={}", key, headerValue);
                     response.addHeader(key, headerValue);
                 }
             }
@@ -122,18 +141,25 @@ public class DefaultNettyHttpBinding imp
             }
             if (buffer != null) {
                 response.setContent(buffer);
-                response.setHeader(HttpHeaders.Names.CONTENT_LENGTH, buffer.readableBytes());
+                int len = buffer.readableBytes();
+                // set content-length
+                response.setHeader(HttpHeaders.Names.CONTENT_LENGTH, len);
+                LOG.trace("Content-Length: {}", len);
             }
         }
 
         // set the content type in the response.
         String contentType = MessageHelper.getContentType(message);
         if (contentType != null) {
+            // set content-type
             response.setHeader(HttpHeaders.Names.CONTENT_TYPE, contentType);
+            LOG.trace("Content-Type: {}", contentType);
         }
 
         // TODO: keep alive should be something we can control
-        response.setHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.CLOSE);
+        String keepAlive = HttpHeaders.Values.CLOSE;
+        response.setHeader(HttpHeaders.Names.CONNECTION, keepAlive);
+        LOG.trace("Connection: {}", keepAlive);
 
         return response;
     }

Modified: camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpBinding.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpBinding.java?rev=1477602&r1=1477601&r2=1477602&view=diff
==============================================================================
--- camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpBinding.java (original)
+++ camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpBinding.java Tue Apr 30 12:52:26 2013
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.netty.http;
 
+import java.util.Map;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.spi.HeaderFilterStrategy;
@@ -38,6 +40,16 @@ public interface NettyHttpBinding {
     Message toCamelMessage(HttpRequest request, Exchange exchange) throws Exception;
 
     /**
+     * Binds from Netty {@link HttpRequest} to Camel headers as a {@link Map}.
+     *
+     * @param request   the netty http request
+     * @param headers   the Camel headers that should be populated
+     * @param exchange  the exchange that should contain the returned message.
+     * @throws Exception is thrown if error during binding
+     */
+    void populateCamelHeaders(HttpRequest request, Map<String, Object> headers, Exchange exchange) throws Exception;
+
+    /**
      * Binds from Camel {@link Message} to Netty {@link HttpResponse}.
      *
      * @param message  the Camel message

Modified: camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java?rev=1477602&r1=1477601&r2=1477602&view=diff
==============================================================================
--- camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java (original)
+++ camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java Tue Apr 30 12:52:26 2013
@@ -40,10 +40,8 @@ public class NettyHttpComponent extends 
         setNettyHttpBinding(new DefaultNettyHttpBinding(getHeaderFilterStrategy()));
     }
 
-    // TODO: allow to turn mapMessage=true|false and rely on on-demand mapping
     // TODO: netty http producer
     // TODO: make it easy to turn keep-alive on|off on producer
-    // TODO: add logging
 
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {

Modified: camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpMessage.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpMessage.java?rev=1477602&r1=1477601&r2=1477602&view=diff
==============================================================================
--- camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpMessage.java (original)
+++ camel/trunk/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpMessage.java Tue Apr 30 12:52:26 2013
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.netty.http;
 
+import java.util.Map;
+
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.impl.DefaultMessage;
 import org.jboss.netty.handler.codec.http.HttpRequest;
 
@@ -28,9 +31,11 @@ import org.jboss.netty.handler.codec.htt
 public class NettyHttpMessage extends DefaultMessage {
 
     private final transient HttpRequest httpRequest;
+    private final transient NettyHttpBinding httpBinding;
 
-    public NettyHttpMessage(HttpRequest httpRequest) {
+    public NettyHttpMessage(HttpRequest httpRequest, NettyHttpBinding httpBinding) {
         this.httpRequest = httpRequest;
+        this.httpBinding = httpBinding;
     }
 
     public HttpRequest getHttpRequest() {
@@ -38,7 +43,16 @@ public class NettyHttpMessage extends De
     }
 
     @Override
+    protected void populateInitialHeaders(Map<String, Object> map) {
+        try {
+            httpBinding.populateCamelHeaders(httpRequest, map, getExchange());
+        } catch (Exception e) {
+            throw new RuntimeCamelException("Error populating initial headers", e);
+        }
+    }
+
+    @Override
     public DefaultMessage newInstance() {
-        return new NettyHttpMessage(httpRequest);
+        return new NettyHttpMessage(httpRequest, httpBinding);
     }
 }