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 2010/05/28 08:15:07 UTC

svn commit: r949109 - in /camel/trunk/components/camel-mail/src: main/java/org/apache/camel/component/mail/MailBinding.java test/java/org/apache/camel/component/mail/MailRouteTest.java

Author: ningjiang
Date: Fri May 28 06:15:07 2010
New Revision: 949109

URL: http://svn.apache.org/viewvc?rev=949109&view=rev
Log:
CAMEL-2763 fixed NO_ASCII subject issue of MailBinding

Modified:
    camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
    camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java

Modified: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java?rev=949109&r1=949108&r2=949109&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java (original)
+++ camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java Fri May 28 06:15:07 2010
@@ -42,6 +42,7 @@ import javax.mail.util.ByteArrayDataSour
 
 import org.apache.camel.Exchange;
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.converter.IOConverter;
 import org.apache.camel.converter.ObjectConverter;
 import org.apache.camel.impl.DefaultHeaderFilterStrategy;
 import org.apache.camel.spi.HeaderFilterStrategy;
@@ -91,7 +92,7 @@ public class MailBinding {
         // and headers the headers win.
         String subject = endpoint.getConfiguration().getSubject();
         if (subject != null) {
-            mimeMessage.setHeader("Subject", subject);
+            mimeMessage.setSubject(subject, IOConverter.getCharsetName(exchange));
         }
 
         // append the rest of the headers (no recipients) that could be subject, reply-to etc.
@@ -323,7 +324,10 @@ public class MailBinding {
             if (headerValue != null) {
                 if (headerFilterStrategy != null
                         && !headerFilterStrategy.applyFilterToCamelHeaders(headerName, headerValue, exchange)) {
-
+                    if (headerName.equalsIgnoreCase("subject")) {
+                        mimeMessage.setSubject(asString(exchange, headerValue), IOConverter.getCharsetName(exchange));
+                        continue;
+                    }
                     if (isRecipientHeader(headerName)) {
                         // skip any recipients as they are handled specially
                         continue;

Modified: camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java?rev=949109&r1=949108&r2=949109&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java (original)
+++ camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java Fri May 28 06:15:07 2010
@@ -64,6 +64,36 @@ public class MailRouteTest extends Camel
 
         assertMailboxReceivedMessages("route-test-copy@localhost");
     }
+    
+    @Test
+    public void testMailSubjectWithUnicode() throws Exception {
+        Mailbox.clearAll();
+
+        String body = "Hello Camel Riders!";
+        String subject = "My Camel \u2122";
+        
+        System.setProperty(Exchange.DEFAULT_CHARSET_PROPERTY, "US-ASCII");
+
+        try {
+            MockEndpoint mock = getMockEndpoint("mock:result");
+        
+            mock.expectedMessageCount(1);
+            // now we don't use the UTF-8 encoding
+            mock.expectedHeaderReceived("subject", "=?US-ASCII?Q?My_Camel_=3F?=");
+            mock.expectedBodiesReceived(body);
+    
+            template.sendBodyAndHeader("direct:a", body, "subject", subject);
+    
+            mock.assertIsSatisfied();
+    
+            assertFalse("Should not have attachements",
+                        mock.getExchanges().get(0).getIn().hasAttachments());
+        } finally {
+            System.clearProperty(Exchange.DEFAULT_CHARSET_PROPERTY);
+        }
+        
+    }
+
 
     protected void assertMailboxReceivedMessages(String name) throws IOException, MessagingException {
         Mailbox mailbox = Mailbox.get(name);