Author: davsclaus Date: Thu Mar 21 10:24:27 2013 New Revision: 1459215 URL: http://svn.apache.org/r1459215 Log: CAMEL-6154: Fixed potential NPE in mail binding if mail content is empty.
Added: camel/branches/camel-2.10.x/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichNoMailTest.java - copied unchanged from r1459214, camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichNoMailTest.java Modified: camel/branches/camel-2.10.x/ (props changed) camel/branches/camel-2.10.x/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java camel/branches/camel-2.10.x/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java Propchange: camel/branches/camel-2.10.x/ ------------------------------------------------------------------------------ Merged /camel/trunk:r1459214 Propchange: camel/branches/camel-2.10.x/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: camel/branches/camel-2.10.x/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java?rev=1459215&r1=1459214&r2=1459215&view=diff ============================================================================== --- camel/branches/camel-2.10.x/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java (original) +++ camel/branches/camel-2.10.x/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java Thu Mar 21 10:24:27 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; } Modified: camel/branches/camel-2.10.x/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java?rev=1459215&r1=1459214&r2=1459215&view=diff ============================================================================== --- camel/branches/camel-2.10.x/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java (original) +++ camel/branches/camel-2.10.x/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java Thu Mar 21 10:24:27 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();