Return-Path: X-Original-To: apmail-camel-commits-archive@www.apache.org Delivered-To: apmail-camel-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id CFDDE10440 for ; Fri, 28 Feb 2014 12:42:32 +0000 (UTC) Received: (qmail 99169 invoked by uid 500); 28 Feb 2014 12:42:31 -0000 Delivered-To: apmail-camel-commits-archive@camel.apache.org Received: (qmail 99124 invoked by uid 500); 28 Feb 2014 12:42:31 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 99110 invoked by uid 99); 28 Feb 2014 12:42:30 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 28 Feb 2014 12:42:30 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 1CE08930623; Fri, 28 Feb 2014 12:42:30 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: ningjiang@apache.org To: commits@camel.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: git commit: CAMEL-7217 set up the charset name of the response message according to the http content-type header Date: Fri, 28 Feb 2014 12:42:30 +0000 (UTC) Repository: camel Updated Branches: refs/heads/master f922a139e -> 308c9d4e6 CAMEL-7217 set up the charset name of the response message according to the http content-type header Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/308c9d4e Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/308c9d4e Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/308c9d4e Branch: refs/heads/master Commit: 308c9d4e67fa20aed5930283c12ba984e27d2b97 Parents: f922a13 Author: Willem Jiang Authored: Fri Feb 28 20:41:36 2014 +0800 Committer: Willem Jiang Committed: Fri Feb 28 20:42:03 2014 +0800 ---------------------------------------------------------------------- .../java/org/apache/camel/util/IOHelper.java | 23 ++++++++++++++++++++ .../org/apache/camel/util/IOHelperTest.java | 11 +++++++++- .../camel/component/ahc/helper/AhcHelper.java | 7 +----- .../camel/component/http/HttpProducer.java | 2 ++ .../camel/component/http4/HttpProducer.java | 1 + .../jetty/DefaultJettyHttpBinding.java | 2 ++ 6 files changed, 39 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/308c9d4e/camel-core/src/main/java/org/apache/camel/util/IOHelper.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/util/IOHelper.java b/camel-core/src/main/java/org/apache/camel/util/IOHelper.java index ed2f793..7d8a836 100644 --- a/camel-core/src/main/java/org/apache/camel/util/IOHelper.java +++ b/camel-core/src/main/java/org/apache/camel/util/IOHelper.java @@ -493,4 +493,27 @@ public final class IOHelper { close(isr, in); } } + + /** + * Get the charset name from the content type string + * @param contentType + * @return the charset name, or UTF-8 if no found + */ + public static String getCharsetNameFromContentType(String contentType) { + String[] values = contentType.split(";"); + String charset = ""; + + for (String value : values) { + value = value.trim(); + if (value.toLowerCase().startsWith("charset=")) { + // Take the charset name + charset = value.substring(8); + } + } + if ("".equals(charset)) { + charset = "UTF-8"; + } + return IOHelper.normalizeCharset(charset); + + } } http://git-wip-us.apache.org/repos/asf/camel/blob/308c9d4e/camel-core/src/test/java/org/apache/camel/util/IOHelperTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/util/IOHelperTest.java b/camel-core/src/test/java/org/apache/camel/util/IOHelperTest.java index ac2e5ff..da2aecf 100644 --- a/camel-core/src/test/java/org/apache/camel/util/IOHelperTest.java +++ b/camel-core/src/test/java/org/apache/camel/util/IOHelperTest.java @@ -96,7 +96,7 @@ public class IOHelperTest extends TestCase { private File tempFile(String testname) throws Exception { return File.createTempFile(testname, ""); } - + private void write(File file, String text) throws Exception { PrintWriter out = new PrintWriter(file); out.print(text); @@ -114,5 +114,14 @@ public class IOHelperTest extends TestCase { exchange.getIn().removeHeader(Exchange.CHARSET_NAME); exchange.setProperty(Exchange.CHARSET_NAME, "iso-8859-1"); assertEquals("iso-8859-1", IOHelper.getCharsetName(exchange, false)); + + } + + public void testGetCharsetNameFromContentType() throws Exception { + String charsetName = IOHelper.getCharsetNameFromContentType("text/html; charset=iso-8859-1"); + assertEquals("iso-8859-1", charsetName); + + charsetName = IOHelper.getCharsetNameFromContentType("text/html"); + assertEquals("UTF-8", charsetName); } } http://git-wip-us.apache.org/repos/asf/camel/blob/308c9d4e/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java index f64067b..208b2da 100644 --- a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java +++ b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java @@ -81,12 +81,7 @@ public final class AhcHelper { public static void setCharsetFromContentType(String contentType, Exchange exchange) { if (contentType != null) { - // find the charset and set it to the Exchange - int index = contentType.indexOf("charset="); - if (index > 0) { - String charset = contentType.substring(index + 8); - exchange.setProperty(Exchange.CHARSET_NAME, IOHelper.normalizeCharset(charset)); - } + exchange.setProperty(Exchange.CHARSET_NAME, IOHelper.getCharsetNameFromContentType(contentType)); } } http://git-wip-us.apache.org/repos/asf/camel/blob/308c9d4e/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java index 6787a6b..9774118 100644 --- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java +++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java @@ -181,7 +181,9 @@ public class HttpProducer extends DefaultProducer { String value = header.getValue(); if (name.toLowerCase().equals("content-type")) { name = Exchange.CONTENT_TYPE; + exchange.setProperty(Exchange.CHARSET_NAME, IOHelper.getCharsetNameFromContentType(value)); } + // use http helper to extract parameter value as it may contain multiple values Object extracted = HttpHelper.extractHttpParameterValue(value); if (strategy != null && !strategy.applyFilterToExternalHeaders(name, extracted, exchange)) { http://git-wip-us.apache.org/repos/asf/camel/blob/308c9d4e/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java index 3480aad..2fb8380 100644 --- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java +++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java @@ -196,6 +196,7 @@ public class HttpProducer extends DefaultProducer { String value = header.getValue(); if (name.toLowerCase().equals("content-type")) { name = Exchange.CONTENT_TYPE; + exchange.setProperty(Exchange.CHARSET_NAME, IOHelper.getCharsetNameFromContentType(value)); } // use http helper to extract parameter value as it may contain multiple values Object extracted = HttpHelper.extractHttpParameterValue(value); http://git-wip-us.apache.org/repos/asf/camel/blob/308c9d4e/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java index 37dd6d4..a69c82c 100644 --- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java @@ -29,6 +29,7 @@ import org.apache.camel.component.http.HttpHeaderFilterStrategy; import org.apache.camel.component.http.HttpOperationFailedException; import org.apache.camel.component.http.helper.HttpHelper; import org.apache.camel.spi.HeaderFilterStrategy; +import org.apache.camel.util.IOHelper; import org.apache.camel.util.MessageHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -104,6 +105,7 @@ public class DefaultJettyHttpBinding implements JettyHttpBinding { if (name.toLowerCase().equals("content-type")) { name = Exchange.CONTENT_TYPE; + exchange.setProperty(Exchange.CHARSET_NAME, IOHelper.getCharsetNameFromContentType(value)); } if (strategy != null && !strategy.applyFilterToExternalHeaders(name, value, exchange)) { HttpHelper.appendHeader(answer.getHeaders(), name, value);