This is an automated email from the ASF dual-hosted git repository.

quinn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new c7b93d9  CAMEL-12279 - restore CamelCharsetName Exchange property if 
set before call to convertBodyTo with Charset
c7b93d9 is described below

commit c7b93d9d4cdccf34fb543272c7bd9e507e2eb474
Author: Quinn Stevenson <qu...@apache.org>
AuthorDate: Mon Feb 19 18:16:05 2018 -0700

    CAMEL-12279 - restore CamelCharsetName Exchange property if set before call 
to convertBodyTo with Charset
---
 .../apache/camel/processor/ConvertBodyProcessor.java  | 10 ++++++++--
 .../org/apache/camel/processor/ConvertBodyTest.java   | 19 +++++++++++++++++++
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git 
a/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java 
b/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java
index e2b334e..449aa9a 100644
--- 
a/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java
+++ 
b/camel-core/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java
@@ -87,7 +87,9 @@ public class ConvertBodyProcessor extends ServiceSupport 
implements AsyncProcess
             return true;
         }
 
+        String originalCharsetName = null;
         if (charset != null) {
+            originalCharsetName = exchange.getProperty(Exchange.CHARSET_NAME, 
String.class);
             // override existing charset with configured charset as that is 
what the user
             // have explicit configured and expects to be used
             exchange.setProperty(Exchange.CHARSET_NAME, charset);
@@ -117,10 +119,14 @@ public class ConvertBodyProcessor extends ServiceSupport 
implements AsyncProcess
             old.setBody(value);
         }
 
-        // remove charset when we are done as we should not propagate that,
+        // remove or restore charset when we are done as we should not 
propagate that,
         // as that can lead to double converting later on
         if (charset != null) {
-            exchange.removeProperty(Exchange.CHARSET_NAME);
+            if (originalCharsetName != null && !originalCharsetName.isEmpty()) 
{
+                exchange.setProperty(Exchange.CHARSET_NAME, 
originalCharsetName);
+            } else {
+                exchange.removeProperty(Exchange.CHARSET_NAME);
+            }
         }
 
         callback.done(true);
diff --git 
a/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java 
b/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java
index af22643..8ac2961 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/ConvertBodyTest.java
@@ -25,6 +25,7 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.builder.ExchangeBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 
@@ -60,6 +61,24 @@ public class ConvertBodyTest extends ContextTestSupport {
         assertMockEndpointsSatisfied();
     }
 
+    public void testConvertBodyCharsetWithExistingCharsetName() throws 
Exception {
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+                from("direct:foo").convertBodyTo(byte[].class, 
"iso-8859-1").to("mock:foo");
+            }
+        });
+
+        getMockEndpoint("mock:foo").expectedMessageCount(1);
+        // do not propagate charset to avoid side effects with double 
conversion etc
+        
getMockEndpoint("mock:foo").message(0).exchangeProperty(Exchange.CHARSET_NAME).isEqualTo("UTF-8");
+
+        Exchange srcExchange = 
ExchangeBuilder.anExchange(context).withProperty(Exchange.CHARSET_NAME, 
"UTF-8").withBody("Hello World").build();
+
+        template.send("direct:foo", srcExchange);
+
+        assertMockEndpointsSatisfied();
+    }
+
     public void testConvertToInteger() throws Exception {
         MockEndpoint result = getMockEndpoint("mock:result");
         result.expectedBodiesReceived(11);

-- 
To stop receiving notification emails like this one, please contact
qu...@apache.org.

Reply via email to