You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/05/27 14:33:50 UTC
svn commit: r779143 - in /camel/trunk/components/camel-mail/src:
main/java/org/apache/camel/component/mail/MailBinding.java
test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java
Author: davsclaus
Date: Wed May 27 12:33:50 2009
New Revision: 779143
URL: http://svn.apache.org/viewvc?rev=779143&view=rev
Log:
CAMEL-1645: camel-mail. Setting ContentType improved to allow charset, and provided in exchange message header as well.
Added:
camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java
- copied, changed from r779124, camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeTest.java
Modified:
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.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=779143&r1=779142&r2=779143&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 Wed May 27 12:33:50 2009
@@ -99,17 +99,39 @@
if (exchange.getIn().hasAttachments()) {
appendAttachmentsFromCamel(mimeMessage, exchange.getIn(), endpoint.getConfiguration());
} else {
- if ("text/html".equals(endpoint.getConfiguration().getContentType())) {
- DataSource ds = new ByteArrayDataSource(exchange.getIn().getBody(String.class), "text/html");
- mimeMessage.setDataHandler(new DataHandler(ds));
- } else {
- // its just text/plain
+ String contentType = populateContentType(endpoint, mimeMessage, exchange);
+ if (contentType == null) {
mimeMessage.setText(exchange.getIn().getBody(String.class));
+ } else if (contentType.startsWith("text/plain")) {
+ String charset = ObjectHelper.after(contentType, "charset=");
+ if (charset != null) {
+ mimeMessage.setText(exchange.getIn().getBody(String.class), charset);
+ } else {
+ mimeMessage.setText(exchange.getIn().getBody(String.class));
+ }
+ } else {
+ // store content in a byte array data store
+ DataSource ds = new ByteArrayDataSource(exchange.getIn().getBody(String.class), contentType);
+ mimeMessage.setDataHandler(new DataHandler(ds));
}
}
}
}
+ protected String populateContentType(MailEndpoint endpoint, MimeMessage mimeMessage, Exchange exchange) throws MessagingException {
+ // see if we got any content type set
+ String contentType = endpoint.getConfiguration().getContentType();
+ if (exchange.getIn().getHeader("contentType") != null) {
+ contentType = exchange.getIn().getHeader("contentType", String.class);
+ } else if (exchange.getIn().getHeader(Exchange.CONTENT_TYPE) != null) {
+ contentType = exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class);
+ }
+ if (contentType != null) {
+ mimeMessage.setHeader("Content-Type", contentType);
+ }
+ return contentType;
+ }
+
/**
* Extracts the body from the Mail message
*/
Copied: camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java (from r779124, camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java?p2=camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java&p1=camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeTest.java&r1=779124&r2=779143&rev=779143&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeTest.java (original)
+++ camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomContentTypeTest.java Wed May 27 12:33:50 2009
@@ -19,13 +19,14 @@
import javax.mail.Message;
import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.jvnet.mock_javamail.Mailbox;
/**
* Unit test for contentType option.
*/
-public class MailContentTypeTest extends ContextTestSupport {
+public class MailCustomContentTypeTest extends ContextTestSupport {
public void testSendHtmlMail() throws Exception {
Mailbox.clearAll();
@@ -36,25 +37,51 @@
Message msg = box.get(0);
assertTrue(msg.getContentType().startsWith("text/html"));
+ assertEquals("text/html;charset=UTF-8", msg.getContentType());
assertEquals("<html><body><h1>Hello</h1>World</body></html>", msg.getContent());
}
- public void testSendPlainMail() throws Exception {
+ public void testSendHtmlMailIso88591() throws Exception {
Mailbox.clearAll();
- sendBody("direct:b", "Hello World");
+ sendBody("direct:c", "<html><body><h1>Hello</h1>World</body></html>");
Mailbox box = Mailbox.get("claus@localhost");
Message msg = box.get(0);
- assertTrue(msg.getContentType().startsWith("text/plain"));
+
+ assertTrue(msg.getContentType().startsWith("text/html"));
+ assertEquals("text/html;charset=iso-8859-1", msg.getContentType());
+ assertEquals("<html><body><h1>Hello</h1>World</body></html>", msg.getContent());
+ }
+
+ public void testSendPlainMailContentTypeInHeader() throws Exception {
+ Mailbox.clearAll();
+
+ template.sendBodyAndHeader("direct:b", "Hello World", "contentType", "text/plain;charset=iso-8859-1");
+
+ Mailbox box = Mailbox.get("claus@localhost");
+ Message msg = box.get(0);
+ assertEquals("text/plain; charset=iso-8859-1", msg.getContentType());
+ assertEquals("Hello World", msg.getContent());
+ }
+
+ public void testSendPlainMailContentTypeInHeader2() throws Exception {
+ Mailbox.clearAll();
+
+ template.sendBodyAndHeader("direct:b", "Hello World", Exchange.CONTENT_TYPE, "text/plain;charset=iso-8859-1");
+
+ Mailbox box = Mailbox.get("claus@localhost");
+ Message msg = box.get(0);
+ assertEquals("text/plain; charset=iso-8859-1", msg.getContentType());
assertEquals("Hello World", msg.getContent());
}
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
- from("direct:a").to("smtp://claus@localhost?contentType=text/html");
- from("direct:b").to("smtp://claus@localhost?contentType=text/plain");
+ from("direct:a").to("smtp://claus@localhost?contentType=text/html;charset=UTF-8");
+ from("direct:b").to("smtp://claus@localhost");
+ from("direct:c").to("smtp://claus@localhost?contentType=text/html;charset=iso-8859-1");
}
};
}