Author: davsclaus
Date: Thu Mar 21 10:12:24 2013
New Revision: 1459214

URL: http://svn.apache.org/r1459214
Log:
CAMEL-6154: Fixed potential NPE in mail binding if mail content is empty.

Added:
    
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichNoMailTest.java
      - copied, changed from r1459175, 
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java
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/MailPollEnrichTest.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=1459214&r1=1459213&r2=1459214&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
 Thu Mar 21 10:12:24 2013
@@ -219,14 +219,20 @@ public class MailBinding {
 
         String contentType = determineContentType(configuration, exchange);
 
-        LOG.trace("Using Content-Type {} for BodyPart: {}", contentType, part);
+        if (contentType != null) {
+            LOG.trace("Using Content-Type {} for BodyPart: {}", contentType, 
part);
 
-        // always store content in a byte array data store to avoid various 
content type and charset issues
-        DataSource ds = new 
ByteArrayDataSource(exchange.getIn().getBody(String.class), contentType);
-        part.setDataHandler(new DataHandler(ds));
+            // always store content in a byte array data store to avoid 
various content type and charset issues
+            String data = 
exchange.getContext().getTypeConverter().tryConvertTo(String.class, 
exchange.getIn().getBody());
+            // use empty data if the body was null for some reason (otherwise 
there is a NPE)
+            data = data != null ? data : "";
 
-        // set the content type header afterwards
-        part.setHeader("Content-Type", contentType);
+            DataSource ds = new ByteArrayDataSource(data, contentType);
+            part.setDataHandler(new DataHandler(ds));
+
+            // set the content type header afterwards
+            part.setHeader("Content-Type", contentType);
+        }
 
         return contentType;
     }

Copied: 
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichNoMailTest.java
 (from r1459175, 
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichNoMailTest.java?p2=camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichNoMailTest.java&p1=camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java&r1=1459175&r2=1459214&rev=1459214&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java
 (original)
+++ 
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichNoMailTest.java
 Thu Mar 21 10:12:24 2013
@@ -17,9 +17,7 @@
 package org.apache.camel.component.mail;
 
 import javax.mail.Folder;
-import javax.mail.Message;
 import javax.mail.Store;
-import javax.mail.internet.MimeMessage;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -28,9 +26,9 @@ import org.junit.Test;
 import org.jvnet.mock_javamail.Mailbox;
 
 /**
- * Unit test for a special corner case with fetchSize=0
+ * Unit test with poll enrich
  */
-public class MailPollEnrichTest extends CamelTestSupport {
+public class MailPollEnrichNoMailTest extends CamelTestSupport {
 
     @Override
     public void setUp() throws Exception {
@@ -40,17 +38,24 @@ public class MailPollEnrichTest extends 
 
     @Test
     public void testPollEnrich() throws Exception {
-        Mailbox mailbox = Mailbox.get("bill@localhost");
-        assertEquals(5, mailbox.size());
-
         MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedBodiesReceived("Message 0");
+        mock.message(0).body().isNull();
 
         template.sendBody("direct:start", "");
 
         mock.assertIsSatisfied();
     }
 
+    @Test
+    public void testPollEnrichNullBody() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.message(0).body().isNull();
+
+        template.sendBody("direct:start", null);
+
+        mock.assertIsSatisfied();
+    }
+
     private void prepareMailbox() throws Exception {
         // connect to mailbox
         Mailbox.clearAll();
@@ -60,22 +65,13 @@ public class MailPollEnrichTest extends 
         Folder folder = store.getFolder("INBOX");
         folder.open(Folder.READ_WRITE);
         folder.expunge();
-
-        // inserts 5 new messages
-        Message[] messages = new Message[5];
-        for (int i = 0; i < 5; i++) {
-            messages[i] = new MimeMessage(sender.getSession());
-            messages[i].setText("Message " + i);
-        }
-        folder.appendMessages(messages);
-        folder.close(true);
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
                 from("direct:start")
-                    .pollEnrich("pop3://bill@localhost?password=secret", 5000)
+                    
.pollEnrich("pop3://bill@localhost?password=secret&delay=1000", 0)
                     .to("log:mail", "mock:result");
             }
         };

Modified: 
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java?rev=1459214&r1=1459213&r2=1459214&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java
 (original)
+++ 
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java
 Thu Mar 21 10:12:24 2013
@@ -28,7 +28,7 @@ import org.junit.Test;
 import org.jvnet.mock_javamail.Mailbox;
 
 /**
- * Unit test for a special corner case with fetchSize=0
+ * Unit test with poll enrich
  */
 public class MailPollEnrichTest extends CamelTestSupport {
 
@@ -51,6 +51,19 @@ public class MailPollEnrichTest extends 
         mock.assertIsSatisfied();
     }
 
+    @Test
+    public void testPollEnrichNullBody() throws Exception {
+        Mailbox mailbox = Mailbox.get("bill@localhost");
+        assertEquals(5, mailbox.size());
+
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("Message 0");
+
+        template.sendBody("direct:start", null);
+
+        mock.assertIsSatisfied();
+    }
+
     private void prepareMailbox() throws Exception {
         // connect to mailbox
         Mailbox.clearAll();


Reply via email to