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 2011/10/21 11:00:31 UTC

svn commit: r1187221 - in /camel/trunk/components/camel-jetty/src: main/java/org/apache/camel/component/jetty/JettyContentExchange.java test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java

Author: davsclaus
Date: Fri Oct 21 09:00:31 2011
New Revision: 1187221

URL: http://svn.apache.org/viewvc?rev=1187221&view=rev
Log:
CAMEL-4571: Jetty producer now supports Content-Type header having quotes arond the charset value.

Added:
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java   (contents, props changed)
      - copied, changed from r1187189, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerPutContentTest.java
Modified:
    camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java

Modified: camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java?rev=1187221&r1=1187220&r2=1187221&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java (original)
+++ camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java Fri Oct 21 09:00:31 2011
@@ -28,11 +28,14 @@ import org.apache.camel.CamelExchangeExc
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangeTimedOutException;
 import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.StringHelper;
 import org.eclipse.jetty.client.ContentExchange;
 import org.eclipse.jetty.client.HttpClient;
 import org.eclipse.jetty.client.HttpExchange;
 import org.eclipse.jetty.http.HttpHeaders;
 import org.eclipse.jetty.io.Buffer;
+import org.eclipse.jetty.io.ByteArrayBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -65,12 +68,34 @@ public class JettyContentExchange extend
 
     @Override
     protected void onResponseHeader(Buffer name, Buffer value) throws IOException {
+        String k = name.toString();
+        String v = value.toString();
+        LOG.trace("onResponseHeader {} -> {}", k, v);
+
+        // need to remove quotes from charset which can be returned by some http servers
+        if (Exchange.CONTENT_TYPE.equalsIgnoreCase(k)) {
+            String charset = ObjectHelper.after(v, "charset=");
+            if (charset != null) {
+                charset = charset.trim();
+                String s = StringHelper.removeLeadingAndEndingQuotes(charset);
+                if (!charset.equals(s)) {
+                    v = ObjectHelper.before(v, "charset=") + "charset=" + s;
+                    LOG.debug("Removed quotes from charset in " + Exchange.CONTENT_TYPE + " from {} to {}", charset, s);
+
+                    // use a new buffer to adjust the value
+                    value = new ByteArrayBuffer.CaseInsensitive(v);
+                }
+            }
+        }
+
         super.onResponseHeader(name, value);
-        headers.put(name.toString(), value.toString());
+        headers.put(k, v);
     }
 
     @Override
     protected void onRequestComplete() throws IOException {
+        LOG.trace("onRequestComplete");
+
         // close the input stream when its not needed anymore
         InputStream is = getRequestContentSource();
         if (is != null) {
@@ -80,6 +105,8 @@ public class JettyContentExchange extend
 
     @Override
     protected void onResponseComplete() throws IOException {
+        LOG.trace("onResponseComplete");
+
         try {
             super.onResponseComplete();
         } finally {
@@ -89,6 +116,8 @@ public class JettyContentExchange extend
 
     @Override
     protected void onExpire() {
+        LOG.trace("onExpire");
+
         try {
             super.onExpire();
         } finally {
@@ -98,6 +127,8 @@ public class JettyContentExchange extend
 
     @Override
     protected void onException(Throwable ex) {
+        LOG.trace("onException {}", ex);
+
         try {
             super.onException(ex);
         } finally {
@@ -107,6 +138,8 @@ public class JettyContentExchange extend
 
     @Override
     protected void onConnectionFailed(Throwable ex) {
+        LOG.trace("onConnectionFailed {}", ex);
+
         try {
             super.onConnectionFailed(ex);
         } finally {

Copied: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java (from r1187189, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerPutContentTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java?p2=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java&p1=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerPutContentTest.java&r1=1187189&r2=1187221&rev=1187221&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerPutContentTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java Fri Oct 21 09:00:31 2011
@@ -16,9 +16,6 @@
  */
 package org.apache.camel.component.jetty.jettyproducer;
 
-import java.io.File;
-import java.io.InputStream;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
@@ -29,10 +26,10 @@ import org.junit.Test;
 /**
  * @version 
  */
-public class JettyHttpProducerPutContentTest extends BaseJettyTest {
+public class JettyHttpProducerContentTypeEncodingInQuoteTest extends BaseJettyTest {
     
     @Test
-    public void testHttpProducerPutContentTest() throws Exception {
+    public void testHttpProducerEncodingInQuoteTest() throws Exception {
         // these tests do not run well on Windows
         if (isPlatform("windows")) {
             return;
@@ -43,21 +40,19 @@ public class JettyHttpProducerPutContent
 
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(1);
-        mock.message(0).body().isInstanceOf(InputStream.class);
-        mock.message(0).header("Content-Type").isEqualTo("image/jpeg");
 
-        Exchange out = template.send("jetty://http://localhost:{{port}}/myapp/myservice", new Processor() {
+        Exchange out = template.send("jetty:http://localhost:{{port}}/myapp/myservice", new Processor() {
             public void process(Exchange exchange) throws Exception {
-                exchange.getIn().setBody(new File("src/test/data/logo.jpeg"));
-                exchange.getIn().setHeader("Content-Type", "image/jpeg");
-                exchange.getIn().setHeader(Exchange.HTTP_METHOD, org.apache.camel.component.http.HttpMethods.PUT);
+                exchange.getIn().setBody("Hello World");
+                exchange.getIn().setHeader("Content-Type", "text/plain; charset=\"utf-8\"");
             }
         });
 
         assertMockEndpointsSatisfied();
 
         assertEquals("OK", out.getOut().getBody(String.class));
-        assertEquals("text/plain", out.getOut().getHeader("Content-Type"));
+        // camel-jetty will remove quotes from charset
+        assertEquals("text/foo; charset=utf-8", out.getOut().getHeader("Content-Type"));
     }
 
     @Override
@@ -69,12 +64,11 @@ public class JettyHttpProducerPutContent
                     .process(new Processor() {
                         public void process(Exchange exchange) throws Exception {
                             String body = exchange.getIn().getBody(String.class);
-                            assertNotNull("Body should not be null", body);
-                            assertTrue("CamelHttpMethod is not PUT", exchange.getIn().getHeader("CamelHttpMethod").equals("PUT"));
-                            assertTrue("Content-Type is not image/jpeg", exchange.getIn().getHeader("Content-Type").equals("image/jpeg"));
+                            assertEquals("Hello World", body);
+                            assertTrue("Content-Type is not text/plain; charset=\"utf-8\"", exchange.getIn().getHeader("Content-Type").equals("text/plain; charset=\"utf-8\""));
                         }
                     })
-                    .transform(constant("OK")).setHeader("Content-Type", constant("text/plain"));
+                    .transform(constant("OK")).setHeader("Content-Type", constant("text/foo; charset=\"utf-8\""));
             }
         };
     }

Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java
------------------------------------------------------------------------------
    svn:eol-style = native