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();