Author: ningjiang
Date: Thu May 14 06:46:16 2009
New Revision: 774658

URL: http://svn.apache.org/viewvc?rev=774658&view=rev
Log:
CAMEL-1609 Better fixing the issue of Content type setting for HTTP producer

Modified:
    
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
    
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpHeaderFilterStrategy.java
    
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
    
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java
    
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java

Modified: 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java?rev=774658&r1=774657&r2=774658&view=diff
==============================================================================
--- 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
 (original)
+++ 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
 Thu May 14 06:46:16 2009
@@ -20,6 +20,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.util.Map;
 
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
@@ -50,7 +52,40 @@
     public void readRequest(HttpServletRequest request, HttpMessage message) {
         // lets force a parse of the body and headers
         message.getBody();
-        message.getHeaders();
+        // populate the headers from the request
+        Map<String, Object> headers = message.getHeaders();
+        
+        //apply the headerFilterStrategy
+        Enumeration names = request.getHeaderNames();
+        while (names.hasMoreElements()) {
+            String name = (String)names.nextElement();
+            Object value = request.getHeader(name);
+            if (headerFilterStrategy != null
+                && !headerFilterStrategy.applyFilterToExternalHeaders(name, 
value, message.getExchange())) {
+                headers.put(name, value);
+            }
+        }
+
+        //if the request method is Get, we also populate the http request 
parameters
+        if (request.getMethod().equalsIgnoreCase("GET")) {
+            names = request.getParameterNames();
+            while (names.hasMoreElements()) {
+                String name = (String)names.nextElement();
+                Object value = request.getParameter(name);
+                if (headerFilterStrategy != null
+                    && 
!headerFilterStrategy.applyFilterToExternalHeaders(name, value, 
message.getExchange())) {
+                    headers.put(name, value);
+                }
+            }
+        }
+        
+        // store the method and query and other info in headers
+        headers.put(HttpConstants.HTTP_METHOD, request.getMethod());
+        headers.put(HttpConstants.HTTP_QUERY, request.getQueryString());
+        headers.put(HttpConstants.HTTP_PATH, request.getPathInfo());
+        headers.put(HttpConstants.HTTP_CONTENT_TYPE, request.getContentType());
+        headers.put(HttpConstants.HTTP_CHARACTER_ENCODING, 
request.getCharacterEncoding());
+        
     }
 
     public void writeResponse(HttpExchange exchange, HttpServletResponse 
response) throws IOException {

Modified: 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpHeaderFilterStrategy.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpHeaderFilterStrategy.java?rev=774658&r1=774657&r2=774658&view=diff
==============================================================================
--- 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpHeaderFilterStrategy.java
 (original)
+++ 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpHeaderFilterStrategy.java
 Thu May 14 06:46:16 2009
@@ -28,7 +28,8 @@
     }
 
     protected void initialize() {
-        getOutFilter().add("content-length");                
+        getOutFilter().add("content-length");
+        getOutFilter().add("content-type");
         getOutFilter().add(HttpConstants.HTTP_METHOD.toLowerCase());
         getOutFilter().add(HttpConstants.HTTP_QUERY);
         getOutFilter().add(HttpConstants.HTTP_RESPONSE_CODE.toLowerCase());

Modified: 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java?rev=774658&r1=774657&r2=774658&view=diff
==============================================================================
--- 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
 (original)
+++ 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
 Thu May 14 06:46:16 2009
@@ -27,6 +27,8 @@
 import org.apache.camel.converter.stream.CachedOutputStream;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.spi.HeaderFilterStrategy;
+import org.apache.camel.util.ExchangeHelper;
+import org.apache.camel.util.MessageHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.commons.httpclient.Header;
 import org.apache.commons.httpclient.HttpClient;
@@ -220,6 +222,9 @@
         }
         if (methodToUse.isEntityEnclosing()) {
             ((EntityEnclosingMethod)method).setRequestEntity(requestEntity);
+            if (requestEntity.getContentType() == null) {
+                LOG.warn("Missing the ContentType in the request entity!");
+            }
         }
 
         return method;
@@ -237,12 +242,12 @@
             return null;
         }
 
-        RequestEntity answer = in.getBody(RequestEntity.class);
+        RequestEntity answer = in.getBody(RequestEntity.class);        
         if (answer == null) {
             try {
                 String data = in.getBody(String.class);
                 if (data != null) {
-                    String contentType = in.getHeader("Content-Type", 
String.class);
+                    String contentType = 
ExchangeHelper.getContentType(exchange);
                     String charset = 
exchange.getProperty(Exchange.CHARSET_NAME, String.class);
                     answer = new StringRequestEntity(data, contentType, 
charset);
                 }
@@ -250,7 +255,6 @@
                 throw new RuntimeCamelException(e);
             }
         }
-
         return answer;
     }
 

Modified: 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java?rev=774658&r1=774657&r2=774658&view=diff
==============================================================================
--- 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java
 (original)
+++ 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java
 Thu May 14 06:46:16 2009
@@ -22,6 +22,7 @@
 import org.apache.camel.Converter;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.http.helper.GZIPHelper;
+import org.apache.camel.util.ExchangeHelper;
 import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
 import org.apache.commons.httpclient.methods.RequestEntity;
 
@@ -36,7 +37,7 @@
         return new InputStreamRequestEntity(
                 GZIPHelper.toGZIPInputStreamIfRequested(
                         
exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING, String.class),
-                        buffer.array()));
+                        buffer.array()), 
ExchangeHelper.getContentType(exchange));
     }
 
     @Converter
@@ -44,7 +45,7 @@
         return new InputStreamRequestEntity(
                 GZIPHelper.toGZIPInputStreamIfRequested(
                         
exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING, String.class),
-                        array));
+                        array), ExchangeHelper.getContentType(exchange));
     }
 
     @Converter
@@ -52,16 +53,21 @@
         return new InputStreamRequestEntity(
                 GZIPHelper.getGZIPWrappedInputStream(
                         
exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING, String.class),
-                        inStream));
+                        inStream), ExchangeHelper.getContentType(exchange));
     }
 
 
     @Converter
     public RequestEntity toRequestEntity(String str, Exchange exchange) throws 
Exception {
-        return new InputStreamRequestEntity(
+        if 
(GZIPHelper.containsGzip(exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING,
 String.class))) {            
+            return new InputStreamRequestEntity(
                 GZIPHelper.toGZIPInputStreamIfRequested(
                         
exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING, String.class),
-                        str.getBytes()));
+                        str.getBytes()), 
ExchangeHelper.getContentType(exchange));
+        } else {
+            // will use the default StringRequestEntity
+            return null;
+        }
     }
 
 

Modified: 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java?rev=774658&r1=774657&r2=774658&view=diff
==============================================================================
--- 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java
 (original)
+++ 
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java
 Thu May 14 06:46:16 2009
@@ -124,7 +124,7 @@
         return compressed;
     }
 
-    private static boolean containsGzip(String str) {
+    public static boolean containsGzip(String str) {
         return str != null && str.toLowerCase().indexOf(GZIP) >= 0;
     }
 


Reply via email to