You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2009/02/10 10:07:58 UTC

svn commit: r742898 - in /camel/trunk/components: camel-http/src/main/java/org/apache/camel/component/http/ camel-http/src/main/java/org/apache/camel/component/http/helper/ camel-http/src/test/java/org/apache/camel/component/http/ camel-jetty/src/test/...

Author: ningjiang
Date: Tue Feb 10 09:07:49 2009
New Revision: 742898

URL: http://svn.apache.org/viewvc?rev=742898&view=rev
Log:
CAMEL-1327 applied the patch with thanks to Roberto, also added some unit tests in camel-jetty

Added:
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java   (with props)
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java   (with props)
    camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/GZIPHelperTest.java   (with props)
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/HttpConverter.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-jetty/src/test/java/org/apache/camel/component/jetty/ConvertPayloadToInputStreamTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteUsingUrlPostTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyContentTypeTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpBindingRefTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpClientOptionsTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyImageFileTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyResponseBodyWhenErrorTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.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=742898&r1=742897&r2=742898&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 Tue Feb 10 09:07:49 2009
@@ -16,15 +16,20 @@
  */
 package org.apache.camel.component.http;
 
+import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.io.PrintWriter;
+import java.util.zip.GZIPOutputStream;
 
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.camel.Message;
+import org.apache.camel.component.http.helper.GZIPHelper;
 import org.apache.camel.spi.HeaderFilterStrategy;
 
 /**
@@ -59,13 +64,22 @@
                 doWriteExceptionResponse(exchange.getException(), response);
             }
         } else {
-            Message out = exchange.getOut();
+            // just copy the protocol relates header
+            copyProtocolHeaders(exchange.getIn(), exchange.getOut());
+            Message out = exchange.getOut();            
             if (out != null) {
                 doWriteResponse(out, response);
             }
         }
     }
 
+    private void copyProtocolHeaders(Message request, Message response) {
+        if (request.getHeader(GZIPHelper.CONTENT_ENCODING) != null) {            
+            String contentEncoding = request.getHeader(GZIPHelper.CONTENT_ENCODING, String.class);            
+            response.setHeader(GZIPHelper.CONTENT_ENCODING, contentEncoding);
+        }        
+    }
+
     public void doWriteExceptionResponse(Throwable exception, HttpServletResponse response) throws IOException {
         response.setStatus(500); // 500 for internal server error
         response.setContentType("text/plain");
@@ -88,8 +102,8 @@
             response.setStatus(code);
         }
         // set the content type in the response.
-        if (message.getHeader("Content-Type") != null) {
-            String contentType = message.getHeader("Content-Type", String.class);
+        if (message.getHeader("Content-Type") != null) {            
+            String contentType = message.getHeader("Content-Type", String.class);            
             response.setContentType(contentType);
         }
 
@@ -106,18 +120,22 @@
         if (message.getBody() != null) {
             // try to stream the body since that would be the most efficient
             InputStream is = message.getBody(InputStream.class);
-            int length = 0;
             if (is != null) {
-                ServletOutputStream os = null;
+                ServletOutputStream os = response.getOutputStream();
                 try {
-                    os = response.getOutputStream();
+                    ByteArrayOutputStream initialArray = new ByteArrayOutputStream();
                     int c;
                     while ((c = is.read()) >= 0) {
-                        os.write(c);
-                        length++;
+                        initialArray.write(c);
                     }
+                    byte[] processedArray = processReponseContent(message, initialArray.toByteArray(), response);
+                    os.write(processedArray);
                     // set content length before we flush
-                    response.setContentLength(length);
+                    // Here the processedArray length is used instead of the
+                    // length of the characters in written to the initialArray
+                    // because if the method processReponseContent compresses
+                    // the data, the processedArray may contain a different length 
+                    response.setContentLength(processedArray.length);
                     os.flush();
                 } finally {
                     os.close();
@@ -135,6 +153,11 @@
 
         }
     }
+    
+    protected byte[] processReponseContent(Message message, byte[] array, HttpServletResponse response) throws IOException {
+        String gzipEncoding = message.getHeader(GZIPHelper.CONTENT_ENCODING, String.class);        
+        return GZIPHelper.compressArrayIfGZIPRequested(gzipEncoding, array, response);
+    }
 
     public Object parseBody(HttpMessage httpMessage) throws IOException {
         // lets assume the body is a reader

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConverter.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConverter.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConverter.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConverter.java Tue Feb 10 09:07:49 2009
@@ -18,11 +18,13 @@
 
 import java.io.BufferedReader;
 import java.io.IOException;
+import java.io.InputStream;
 
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.camel.Converter;
+import org.apache.camel.component.http.helper.GZIPHelper;
 
 /**
  * Some converter methods making it easy to convert the body of a message to servlet types or to switch between
@@ -51,6 +53,15 @@
     }
 
     @Converter
+    public InputStream toInputStream(HttpMessage message) throws Exception {
+        HttpServletRequest request = toServletRequest(message);
+        if (request != null) {
+            return GZIPHelper.getInputStream(request);
+        }
+        return null;
+    }
+
+    @Converter
     public BufferedReader toReader(HttpMessage message) throws IOException {
         HttpServletRequest request = toServletRequest(message);
         if (request != null) {

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=742898&r1=742897&r2=742898&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 Tue Feb 10 09:07:49 2009
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.http;
 
+import org.apache.camel.component.http.helper.GZIPHelper;
 import org.apache.camel.impl.DefaultHeaderFilterStrategy;
 
 /**
@@ -30,6 +31,7 @@
     protected void initialize() {
         getOutFilter().add("content-length");
         getOutFilter().add("content-type");
+        getOutFilter().add(GZIPHelper.CONTENT_ENCODING);
         getOutFilter().add(HttpMethods.HTTP_METHOD);
         getOutFilter().add(HttpProducer.QUERY);
         getOutFilter().add(HttpProducer.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=742898&r1=742897&r2=742898&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 Tue Feb 10 09:07:49 2009
@@ -24,6 +24,7 @@
 import org.apache.camel.Message;
 import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.component.http.helper.GZIPHelper;
 import org.apache.camel.component.http.helper.LoadingByteArrayOutputStream;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.spi.HeaderFilterStrategy;
@@ -146,7 +147,7 @@
         InputStream is = null;
         try {
             bos = new LoadingByteArrayOutputStream();
-            is = method.getResponseBodyAsStream();
+            is = GZIPHelper.getInputStream(method);            
             // in case of no response stream
             if (is == null) {
                 return null;

Added: 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=742898&view=auto
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java (added)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java Tue Feb 10 09:07:49 2009
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.http;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.util.zip.GZIPOutputStream;
+
+import javax.servlet.ServletInputStream;
+
+import org.apache.camel.Converter;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.component.http.helper.GZIPHelper;
+import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
+import org.apache.commons.httpclient.methods.RequestEntity;
+
+
+
+/**
+ * Some converter methods to make it easier to convert the body to RequestEntity types.
+ * 
+ */
+
+@Converter
+public class RequestEntityConverter {
+
+    @Converter
+    public RequestEntity toRequestEntity(ByteBuffer buffer, Exchange exchange) throws Exception {
+        return new InputStreamRequestEntity(
+               GZIPHelper.toGZIPInputStreamIfRequested(
+                   (String) exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING),
+                   buffer.array()));
+    } 
+
+    @Converter
+    public RequestEntity toRequestEntity(byte[] array, Exchange exchange) throws Exception {
+        return new InputStreamRequestEntity(
+               GZIPHelper.toGZIPInputStreamIfRequested(
+                   (String) exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING),
+                   array));
+    } 
+
+    @Converter
+    public RequestEntity toRequestEntity(InputStream inStream, Exchange exchange) throws Exception {
+        return new InputStreamRequestEntity(
+               GZIPHelper.getGZIPWrappedInputStream(
+                    (String) exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING),
+                    inStream));
+    } 
+
+
+    @Converter
+    public RequestEntity toRequestEntity(String str, Exchange exchange) throws Exception {
+        return new InputStreamRequestEntity(
+               GZIPHelper.toGZIPInputStreamIfRequested(
+                   (String) exchange.getIn().getHeader(GZIPHelper.CONTENT_ENCODING),
+                   str.getBytes()));
+    } 
+
+
+}
+

Propchange: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/RequestEntityConverter.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 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=742898&view=auto
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java (added)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java Tue Feb 10 09:07:49 2009
@@ -0,0 +1,131 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.http.helper;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.camel.Message;
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpMethod;
+
+/**
+ * 
+ * Helper/Utility class to help wrapping
+ * content into GZIP Input/Output Streams.
+ * 
+ *
+ */
+public final class GZIPHelper {
+
+    public static final String CONTENT_ENCODING = "Content-Encoding";
+    public static final String GZIP = "gzip";
+    
+
+    // No need for instatiating, so avoid it.
+    private GZIPHelper() { }
+    
+    public static void setGZIPMessageHeader(Message message) {
+        message.setHeader(CONTENT_ENCODING, GZIP);
+    }
+    
+    public static void setGZIPContentEncoding(HttpServletResponse response) {
+        response.setHeader(CONTENT_ENCODING, GZIP);
+    }
+
+    // --------- Methods To Decompress ----------
+
+    public static InputStream getInputStream(HttpMethod method)
+        throws IOException {
+
+        Header header = method.getRequestHeader(CONTENT_ENCODING);
+        String contentEncoding =  header != null ? header.getValue() : null;
+        return getGZIPWrappedInputStream(contentEncoding, 
+            method.getResponseBodyAsStream());
+    }
+
+    public static InputStream getInputStream(HttpServletRequest request) throws Exception {
+        InputStream dataStream = request.getInputStream();
+        String contentEncoding = request.getHeader(CONTENT_ENCODING);
+        return getGZIPWrappedInputStream(contentEncoding, dataStream);
+    }
+
+    public static InputStream getGZIPWrappedInputStream(String gzipEncoding,
+        InputStream inStream) throws IOException {
+        if (containsGzip(gzipEncoding)) {
+            return new GZIPInputStream(new BufferedInputStream(inStream));
+        } else {
+            return inStream;
+        }
+    }
+
+    public static InputStream toGZIPInputStreamIfRequested(String gzipEncoding, byte[] array)
+        throws Exception {
+        if (containsGzip(gzipEncoding)) {
+            // GZip byte array content
+            ByteArrayOutputStream outputByteArray = new ByteArrayOutputStream();
+            GZIPOutputStream gzipOutputStream = new GZIPOutputStream(
+                outputByteArray);
+            gzipOutputStream.write(array);
+            gzipOutputStream.close();
+            return new ByteArrayInputStream(outputByteArray.toByteArray());
+        } else {
+            return new ByteArrayInputStream(array);
+        }
+    }
+
+    // -------------- Methods To Compress --------------
+
+    public static byte[] compressArrayIfGZIPRequested(String gzipEncoding,
+        byte[] array) throws IOException {
+        if (containsGzip(gzipEncoding)) {
+            return getGZIPWrappedOutputStream(array).toByteArray();
+        } else {
+            return array;
+        }
+    }
+    
+    public static byte[] compressArrayIfGZIPRequested(String gzipEncoding,
+            byte[] array, HttpServletResponse response) throws IOException {
+        if (containsGzip(gzipEncoding)) {
+            return getGZIPWrappedOutputStream(array).toByteArray();
+        } else {
+            return array;
+        }
+    }
+    
+    public static ByteArrayOutputStream getGZIPWrappedOutputStream(byte[] array) throws IOException {
+        ByteArrayOutputStream compressed = new ByteArrayOutputStream();
+        GZIPOutputStream gzout = new GZIPOutputStream(compressed);
+        gzout.write(array);
+        gzout.close();
+        return compressed;
+    }
+
+    private static boolean containsGzip(String str) {
+        return str != null && str.toLowerCase().indexOf(GZIP) >= 0;
+    }
+
+}

Propchange: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/GZIPHelper.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/GZIPHelperTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/GZIPHelperTest.java?rev=742898&view=auto
==============================================================================
--- camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/GZIPHelperTest.java (added)
+++ camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/GZIPHelperTest.java Tue Feb 10 09:07:49 2009
@@ -0,0 +1,98 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.http;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
+
+import junit.framework.TestCase;
+
+import org.apache.camel.component.http.helper.GZIPHelper;
+
+public class GZIPHelperTest extends TestCase {
+
+    public void testGetGZIPWrappedInputStreamTrue() throws Exception {
+        ByteArrayOutputStream compressed = new ByteArrayOutputStream();
+        GZIPOutputStream gzout = new GZIPOutputStream(compressed);
+        gzout.write(new byte[]{0, 1});
+        gzout.close();
+        ByteArrayInputStream bai = new ByteArrayInputStream(compressed.toByteArray());
+        InputStream inStream = GZIPHelper.getGZIPWrappedInputStream(GZIPHelper.GZIP, bai);
+        assertNotNull(inStream);
+        assertTrue("Returned InputStream is not of type GZIPInputStream", inStream instanceof GZIPInputStream);
+    }
+
+    public void testGetGZIPWrappedInputStreamFalse() throws Exception {
+        ByteArrayInputStream bai = new ByteArrayInputStream(new byte[]{0, 1});
+        InputStream inStream = GZIPHelper.getGZIPWrappedInputStream("other-encoding", bai);
+        assertNotNull(inStream);
+        assertFalse("Unexpected Return InputStream type", inStream instanceof GZIPInputStream);
+    }
+
+    public void testGetInputStreamStringByteArrayTrue() throws Exception {
+        InputStream inStream = GZIPHelper.toGZIPInputStreamIfRequested(GZIPHelper.GZIP, new byte[]{0, 1});
+        assertNotNull(inStream);
+        try {
+            new GZIPInputStream(inStream);
+        } catch (Exception e) {
+            fail("Returned InpuStream is not GZipped correctly");
+        }
+    }
+
+    public void testGetInputStreamStringByteArrayFalse() throws Exception {
+        InputStream inStream = GZIPHelper.toGZIPInputStreamIfRequested("other-encoding", new byte[]{0, 1});
+        assertNotNull(inStream);
+        try {
+            new GZIPInputStream(inStream);
+            fail("Returned InputStream should not be GZipped!");
+        } catch (IOException e) {
+            // Expected error.
+        }
+    }
+
+    public void testCompressArrayIfGZIPRequestedStringByteArrayTrue() throws Exception {
+        byte[] initialArray = new byte[]{0, 1};
+        
+        ByteArrayOutputStream compressed = new ByteArrayOutputStream();
+        GZIPOutputStream gzout = new GZIPOutputStream(compressed);
+        gzout.write(initialArray);
+        gzout.close();
+        byte[] expectedArray = compressed.toByteArray();
+        assertNotNull("Returned expectedArray is null", expectedArray);
+
+        byte[] retArray = GZIPHelper.compressArrayIfGZIPRequested(GZIPHelper.GZIP, initialArray);
+        assertNotNull("Returned array is null", retArray);
+
+
+        assertTrue("Length of returned array is different than expected array.", expectedArray.length == retArray.length);
+
+        for (int i = 0; i < retArray.length; i++) {
+            assertEquals("Contents of returned array is different thatn expected array", expectedArray[i], retArray[i]);
+        }
+
+    }
+
+    public void testGetGZIPWrappedOutputStream() throws Exception {
+        ByteArrayOutputStream arrayOutputStream = GZIPHelper.getGZIPWrappedOutputStream(new byte[]{0, 1});
+        assertNotNull(arrayOutputStream);
+    }
+
+}

Propchange: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/GZIPHelperTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/GZIPHelperTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ConvertPayloadToInputStreamTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ConvertPayloadToInputStreamTest.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ConvertPayloadToInputStreamTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ConvertPayloadToInputStreamTest.java Tue Feb 10 09:07:49 2009
@@ -40,7 +40,7 @@
         MockEndpoint mockEndpoint = getMockEndpoint("mock:result");
         mockEndpoint.expectedMessageCount(1);
 
-        template.sendBodyAndHeader("http://localhost:8080/test", expectedBody, "Content-Type", "application/xml");
+        template.sendBodyAndHeader("http://localhost:9080/test", expectedBody, "Content-Type", "application/xml");
 
         mockEndpoint.assertIsSatisfied();
         List<Exchange> list = mockEndpoint.getReceivedExchanges();
@@ -59,7 +59,7 @@
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() {
-                from("jetty:http://localhost:8080/test").
+                from("jetty:http://localhost:9080/test").
                         convertBodyTo(InputStream.class).
                         to("mock:result");
             }

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java Tue Feb 10 09:07:49 2009
@@ -39,14 +39,14 @@
                 JettyHttpComponent componentJetty = (JettyHttpComponent) context.getComponent("jetty");
                 componentJetty.setSslSocketConnector(sslSocketConnector);
                 
-                from("jetty:https://localhost:8080/test").to("mock:a");
+                from("jetty:https://localhost:9080/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:https://localhost:8080/hello").process(proc);
+                from("jetty:https://localhost:9080/hello").process(proc);
             }
         };
     }

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java Tue Feb 10 09:07:49 2009
@@ -63,7 +63,7 @@
     public void testHelloEndpoint() throws Exception {
 
         ByteArrayOutputStream os = new ByteArrayOutputStream();
-        InputStream is = new URL("http://localhost:8080/hello").openStream();
+        InputStream is = new URL("http://localhost:9080/hello").openStream();
         int c;
         while ((c = is.read()) >= 0) {
             os.write(c);
@@ -75,14 +75,14 @@
     }
 
     protected void invokeHttpEndpoint() throws IOException {
-        template.sendBodyAndHeader("http://localhost:8080/test", expectedBody, "Content-Type", "application/xml");
+        template.sendBodyAndHeader("http://localhost:9080/test", expectedBody, "Content-Type", "application/xml");
     }
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() {
-                from("jetty:http://localhost:8080/test").to("mock:a");
+                from("jetty:http://localhost:9080/test").to("mock:a");
 
                 Processor proc = new Processor() {
                     public void process(Exchange exchange) throws Exception {
@@ -96,7 +96,7 @@
                         exchange.getOut(true).setBody("<b>Hello World</b>");
                     }
                 };
-                from("jetty:http://localhost:8080/hello?sessionSupport=true").process(proc);
+                from("jetty:http://localhost:9080/hello?sessionSupport=true").process(proc);
             }
         };
     }

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteUsingUrlPostTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteUsingUrlPostTest.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteUsingUrlPostTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteUsingUrlPostTest.java Tue Feb 10 09:07:49 2009
@@ -31,7 +31,7 @@
 public class HttpRouteUsingUrlPostTest extends HttpRouteTest {
 
     protected void invokeHttpEndpoint() throws IOException {
-        URL url = new URL("http://localhost:8080/test");
+        URL url = new URL("http://localhost:9080/test");
         URLConnection urlConnection = url.openConnection();
         urlConnection.setDoInput(true);
         urlConnection.setDoOutput(true);

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java Tue Feb 10 09:07:49 2009
@@ -96,7 +96,7 @@
     public void testEndpointWithoutHttps() {
         MockEndpoint mockEndpoint = resolveMandatoryEndpoint("mock:a", MockEndpoint.class);    
         try {
-            template.sendBodyAndHeader("jetty:http://localhost:8080/test", expectedBody, "Content-Type", "application/xml");
+            template.sendBodyAndHeader("jetty:http://localhost:9080/test", expectedBody, "Content-Type", "application/xml");
             fail("expect exception on access to https endpoint via http");
         } catch (RuntimeCamelException expected) {
         }
@@ -106,7 +106,7 @@
     public void testHelloEndpoint() throws Exception {
 
         ByteArrayOutputStream os = new ByteArrayOutputStream();
-        InputStream is = new URL("https://localhost:8080/hello").openStream();
+        InputStream is = new URL("https://localhost:9080/hello").openStream();
         int c;
         while ((c = is.read()) >= 0) {
             os.write(c);
@@ -119,7 +119,7 @@
         
     public void testHelloEndpointWithoutHttps() throws Exception {
         try {
-            new URL("http://localhost:8080/hello").openStream();
+            new URL("http://localhost:9080/hello").openStream();
             fail("expected SocketException on use ot http");
         } catch (SocketException expected) {
         }
@@ -128,7 +128,7 @@
     }
     
     protected void invokeHttpEndpoint() throws IOException {
-        template.sendBodyAndHeader("jetty:https://localhost:8080/test", expectedBody, "Content-Type", "application/xml");
+        template.sendBodyAndHeader("jetty:https://localhost:9080/test", expectedBody, "Content-Type", "application/xml");
     }
 
     @Override
@@ -142,14 +142,14 @@
                 URL keyStoreUrl = this.getClass().getClassLoader().getResource("jsse/localhost.ks");
                 componentJetty.setKeystore(keyStoreUrl.getPath());
                 
-                from("jetty:https://localhost:8080/test").to("mock:a");
+                from("jetty:https://localhost:9080/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:https://localhost:8080/hello").process(proc);
+                from("jetty:https://localhost:9080/hello").process(proc);
             }
         };
     }

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyContentTypeTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyContentTypeTest.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyContentTypeTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyContentTypeTest.java Tue Feb 10 09:07:49 2009
@@ -21,6 +21,7 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.http.helper.GZIPHelper;
 
 /**
  * Unit test for content-type
@@ -28,7 +29,7 @@
 public class JettyContentTypeTest extends ContextTestSupport {
 
     public void testSameContentType() throws Exception {
-        Endpoint endpoint = context.getEndpoint("http://localhost:8080/myapp/myservice");
+        Endpoint endpoint = context.getEndpoint("http://localhost:9080/myapp/myservice");
         Exchange exchange = endpoint.createExchange();
         exchange.getIn().setBody("<order>123</order>");
         exchange.getIn().setHeader("user", "Claus");
@@ -39,9 +40,24 @@
         assertEquals("<order>OK</order>", body);
         assertOutMessageHeader(exchange, "content-type", "text/xml");
     }
+    
+    public void testContentTypeWithGZip() throws Exception {
+        Endpoint endpoint = context.getEndpoint("http://localhost:9080/myapp/myservice");
+        Exchange exchange = endpoint.createExchange();
+        exchange.getIn().setBody("<order>123</order>");
+        exchange.getIn().setHeader("user", "Claus");
+        exchange.getIn().setHeader("content-type", "text/xml");
+        GZIPHelper.setGZIPMessageHeader(exchange.getIn());
+        template.send(endpoint, exchange);
+
+        String body = exchange.getOut().getBody(String.class);
+        assertEquals("<order>OK</order>", body);
+        assertOutMessageHeader(exchange, "content-type", "text/xml");
+        assertOutMessageHeader(exchange, GZIPHelper.CONTENT_ENCODING, GZIPHelper.GZIP);
+    }
 
     public void testMixedContentType() throws Exception {
-        Endpoint endpoint = context.getEndpoint("http://localhost:8080/myapp/myservice");
+        Endpoint endpoint = context.getEndpoint("http://localhost:9080/myapp/myservice");
         Exchange exchange = endpoint.createExchange();
         exchange.getIn().setBody("<order>123</order>");
         exchange.getIn().setHeader("Content-Type", "text/xml");
@@ -56,7 +72,7 @@
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("jetty:http://localhost:8080/myapp/myservice").process(new MyBookService());
+                from("jetty:http://localhost:9080/myapp/myservice").process(new MyBookService());
             }
         };
     }
@@ -64,7 +80,7 @@
     public class MyBookService implements Processor {
         public void process(Exchange exchange) throws Exception {
             if (exchange.getIn().getHeader("user") != null) {
-                exchange.getOut().setBody("<order>OK</order>");
+                exchange.getOut().setBody("<order>OK</order>");                
             } else {
                 exchange.getOut().setBody("FAIL");
                 exchange.getOut().setHeader("Content-Type", "text/plain");

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpBindingRefTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpBindingRefTest.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpBindingRefTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpBindingRefTest.java Tue Feb 10 09:07:49 2009
@@ -32,12 +32,12 @@
 public class JettyHttpBindingRefTest extends ContextTestSupport {
 
     public void testDefaultHttpBinding() throws Exception {
-        Object out = template.requestBody("http://localhost:8080/myapp/myservice", "Hello World");
+        Object out = template.requestBody("http://localhost:9080/myapp/myservice", "Hello World");
         assertEquals("Bye World", context.getTypeConverter().convertTo(String.class, out));
     }
 
     public void testCustomHttpBinding() throws Exception {
-        Object out = template.requestBody("http://localhost:8081/myapp/myotherservice", "Hello World");
+        Object out = template.requestBody("http://localhost:9081/myapp/myotherservice", "Hello World");
         assertEquals("Something went wrong but we dont care", context.getTypeConverter().convertTo(String.class, out));
     }
 
@@ -56,9 +56,9 @@
             public void configure() throws Exception {
                 errorHandler(noErrorHandler());
 
-                from("jetty:http://localhost:8080/myapp/myservice?httpBindingRef=default").transform().constant("Bye World");
+                from("jetty:http://localhost:9080/myapp/myservice?httpBindingRef=default").transform().constant("Bye World");
 
-                from("jetty:http://localhost:8081/myapp/myotherservice?httpBindingRef=myownbinder").process(new Processor() {
+                from("jetty:http://localhost:9081/myapp/myotherservice?httpBindingRef=myownbinder").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
                         throw new IllegalStateException("Not implemented");
                     }

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpClientOptionsTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpClientOptionsTest.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpClientOptionsTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpClientOptionsTest.java Tue Feb 10 09:07:49 2009
@@ -34,7 +34,7 @@
         assertEquals("Get the wrong http client parameter", 5555, producer.getHttpClient().getParams().getSoTimeout());
 
         // send and receive
-        Object out = template.requestBody("http://localhost:8080/myapp/myservice", "Hello World");
+        Object out = template.requestBody("http://localhost:9080/myapp/myservice", "Hello World");
         assertEquals("Bye World", context.getTypeConverter().convertTo(String.class, out));
     }
 
@@ -43,7 +43,7 @@
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("jetty:http://localhost:8080/myapp/myservice?httpClient.soTimeout=5555").transform().constant("Bye World");
+                from("jetty:http://localhost:9080/myapp/myservice?httpClient.soTimeout=5555").transform().constant("Bye World");
             }
         };
     }

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyImageFileTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyImageFileTest.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyImageFileTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyImageFileTest.java Tue Feb 10 09:07:49 2009
@@ -23,6 +23,7 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.http.helper.GZIPHelper;
 
 /**
  * Unit test for exposing a http server that returns images
@@ -30,19 +31,29 @@
 public class JettyImageFileTest extends ContextTestSupport {
 
     public void testImageContentType() throws Exception {
-        Endpoint endpoint = context.getEndpoint("http://localhost:8080/myapp/myservice");
+        Endpoint endpoint = context.getEndpoint("http://localhost:9080/myapp/myservice");
         Exchange exchange = endpoint.createExchange();
         template.send(endpoint, exchange);
 
         assertNotNull(exchange.getOut().getBody());
         assertOutMessageHeader(exchange, "Content-Type", "image/jpeg");
     }
+    
+    public void testImageWithGZip() throws Exception {
+        Endpoint endpoint = context.getEndpoint("http://localhost:9080/myapp/myservice");
+        Exchange exchange = endpoint.createExchange();
+        GZIPHelper.setGZIPMessageHeader(exchange.getIn());
+        template.send(endpoint, exchange);
+
+        assertNotNull(exchange.getOut().getBody());
+        assertOutMessageHeader(exchange, "Content-Type", "image/jpeg");
+    }
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("jetty:http://localhost:8080/myapp/myservice").process(new MyImageService());
+                from("jetty:http://localhost:9080/myapp/myservice").process(new MyImageService());
             }
         };
     }

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyResponseBodyWhenErrorTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyResponseBodyWhenErrorTest.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyResponseBodyWhenErrorTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyResponseBodyWhenErrorTest.java Tue Feb 10 09:07:49 2009
@@ -30,7 +30,7 @@
 
     public void testResponseBodyWhenError() throws Exception {
         try {
-            template.sendBody("http://localhost:8080/myapp/myservice", "bookid=123");
+            template.sendBody("http://localhost:9080/myapp/myservice", "bookid=123");
             fail("Should have thrown an exception");
         } catch (RuntimeCamelException e) {
             HttpOperationFailedException cause = (HttpOperationFailedException) e.getCause();
@@ -48,7 +48,7 @@
         return new RouteBuilder() {
             public void configure() throws Exception {
                 errorHandler(noErrorHandler());
-                from("jetty:http://localhost:8080/myapp/myservice").process(new MyBookService());
+                from("jetty:http://localhost:9080/myapp/myservice").process(new MyBookService());
             }
         };
     }

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java?rev=742898&r1=742897&r2=742898&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyRouteTest.java Tue Feb 10 09:07:49 2009
@@ -29,7 +29,7 @@
 public class JettyRouteTest extends ContextTestSupport {
 
     public void testSendToJetty() throws Exception {
-        Object response = template.requestBody("http://localhost:8080/myapp/myservice", "bookid=123");
+        Object response = template.requestBody("http://localhost:9080/myapp/myservice", "bookid=123");
         // convert the response to a String
         String body = context.getTypeConverter().convertTo(String.class, response);
         assertEquals("<html><body>Book 123 is Camel in Action</body></html>", body);
@@ -40,7 +40,7 @@
         return new RouteBuilder() {
             public void configure() throws Exception {
                 // START SNIPPET: e1
-                from("jetty:http://localhost:8080/myapp/myservice").process(new MyBookService());
+                from("jetty:http://localhost:9080/myapp/myservice").process(new MyBookService());
                 // END SNIPPET: e1
             }
         };