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