From 2ba1fe08425649b1398c28da38c069bd42b3f3d4 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Tue, 19 Aug 2008 12:44:55 +0000 Subject: [PATCH] AbstractMailHeaderMapper correctly handles FROM and REPLY_TO as String values rather than Arrrays (INT-345). --- .../.classpath | 2 +- .../mail/AbstractMailHeaderMapper.java | 26 +-- .../DefaultMailMessageHeaderMapperTests.java | 153 ++++++++++++++++++ 3 files changed, 171 insertions(+), 10 deletions(-) create mode 100644 org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/mail/DefaultMailMessageHeaderMapperTests.java diff --git a/org.springframework.integration.adapter/.classpath b/org.springframework.integration.adapter/.classpath index b3fa2c313c..869134428b 100644 --- a/org.springframework.integration.adapter/.classpath +++ b/org.springframework.integration.adapter/.classpath @@ -6,7 +6,7 @@ - + diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/mail/AbstractMailHeaderMapper.java b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/mail/AbstractMailHeaderMapper.java index fbbacb3e29..bb47448047 100644 --- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/mail/AbstractMailHeaderMapper.java +++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/mail/AbstractMailHeaderMapper.java @@ -125,15 +125,15 @@ public abstract class AbstractMailHeaderMapper implements MessageHeaderMapper mapToMessageHeaders(MimeMessage mailMessage) { try { Map headers = new HashMap(); - headers.put(MailAttributeKeys.FROM, toStringArray(mailMessage.getFrom())); - headers.put(MailAttributeKeys.BCC, toStringArray(mailMessage.getRecipients(RecipientType.BCC))); - headers.put(MailAttributeKeys.CC, toStringArray(mailMessage.getRecipients(RecipientType.CC))); - headers.put(MailAttributeKeys.TO, toStringArray(mailMessage.getRecipients(RecipientType.TO))); - headers.put(MailAttributeKeys.REPLY_TO, toStringArray(mailMessage.getReplyTo())); + headers.put(MailAttributeKeys.FROM, convertToString(mailMessage.getFrom())); + headers.put(MailAttributeKeys.BCC, convertToStringArray(mailMessage.getRecipients(RecipientType.BCC))); + headers.put(MailAttributeKeys.CC, convertToStringArray(mailMessage.getRecipients(RecipientType.CC))); + headers.put(MailAttributeKeys.TO, convertToStringArray(mailMessage.getRecipients(RecipientType.TO))); + headers.put(MailAttributeKeys.REPLY_TO, convertToString(mailMessage.getReplyTo())); headers.put(MailAttributeKeys.SUBJECT, mailMessage.getSubject()); return headers; } @@ -142,7 +142,6 @@ public abstract class AbstractMailHeaderMapper implements MessageHeaderMapper headers = mapper.mapToMessageHeaders(mailMessageMock); + Object fromHeader = headers.get(MailAttributeKeys.FROM); + assertNotNull(fromHeader); + assertTrue(fromHeader instanceof String); + assertEquals("from@example.org", fromHeader); + } + + @Test + public void mapExactlyOneReplyToAttributeFromMimeMessage() throws MessagingException { + DefaultMailMessageHeaderMapper mapper = new DefaultMailMessageHeaderMapper(); + MimeMessage mailMessageMock = EasyMock.createMock(MimeMessage.class); + Address[] replyToAddresses = new Address[] { new InternetAddress("replyTo@example.org") }; + EasyMock.expect(mailMessageMock.getFrom()).andReturn(new Address[0]); + EasyMock.expect(mailMessageMock.getRecipients(RecipientType.BCC)).andReturn(new Address[0]); + EasyMock.expect(mailMessageMock.getRecipients(RecipientType.CC)).andReturn(new Address[0]); + EasyMock.expect(mailMessageMock.getRecipients(RecipientType.TO)).andReturn(new Address[0]); + EasyMock.expect(mailMessageMock.getReplyTo()).andReturn(replyToAddresses); + EasyMock.expect(mailMessageMock.getSubject()).andReturn("mail test"); + EasyMock.replay(mailMessageMock); + Map headers = mapper.mapToMessageHeaders(mailMessageMock); + Object replyToHeader = headers.get(MailAttributeKeys.REPLY_TO); + assertNotNull(replyToHeader); + assertTrue(replyToHeader instanceof String); + assertEquals("replyTo@example.org", replyToHeader); + } + + @Test + public void mapMultipleToAttributesFromMimeMessage() throws MessagingException { + DefaultMailMessageHeaderMapper mapper = new DefaultMailMessageHeaderMapper(); + MimeMessage mailMessageMock = EasyMock.createMock(MimeMessage.class); + Address[] toAddresses = new Address[] { + new InternetAddress("a@example.org"), new InternetAddress("b@example.org"), new InternetAddress("c@example.org") + }; + EasyMock.expect(mailMessageMock.getFrom()).andReturn(new Address[0]); + EasyMock.expect(mailMessageMock.getRecipients(RecipientType.BCC)).andReturn(new Address[0]); + EasyMock.expect(mailMessageMock.getRecipients(RecipientType.CC)).andReturn(new Address[0]); + EasyMock.expect(mailMessageMock.getRecipients(RecipientType.TO)).andReturn(toAddresses); + EasyMock.expect(mailMessageMock.getReplyTo()).andReturn(new Address[0]); + EasyMock.expect(mailMessageMock.getSubject()).andReturn("mail test"); + EasyMock.replay(mailMessageMock); + Map headers = mapper.mapToMessageHeaders(mailMessageMock); + Object toHeader = headers.get(MailAttributeKeys.TO); + assertNotNull(toHeader); + assertTrue(toHeader instanceof String[]); + String[] addresses = (String[]) toHeader; + assertTrue(ObjectUtils.containsElement(addresses, "a@example.org")); + assertTrue(ObjectUtils.containsElement(addresses, "b@example.org")); + assertTrue(ObjectUtils.containsElement(addresses, "c@example.org")); + } + + @Test + public void mapReplyToValueFromHeadersToMimeMessage() throws MessagingException { + DefaultMailMessageHeaderMapper mapper = new DefaultMailMessageHeaderMapper(); + Map headerMap = new HashMap(); + headerMap.put(MailAttributeKeys.REPLY_TO, "replyTo@example.org"); + MessageHeaders headers = new MessageHeaders(headerMap); + MimeMessage mailMessageMock = EasyMock.createNiceMock(MimeMessage.class); + EasyMock.replay(mailMessageMock); + MimeMessage mimeMessage = new MimeMessage(mailMessageMock); + mapper.mapFromMessageHeaders(headers, mimeMessage); + Address[] replyToAddresses = mimeMessage.getReplyTo(); + assertEquals(1, replyToAddresses.length); + assertEquals("replyTo@example.org", replyToAddresses[0].toString()); + } + + @Test + public void mapFromValueFromHeadersToMimeMessage() throws MessagingException { + DefaultMailMessageHeaderMapper mapper = new DefaultMailMessageHeaderMapper(); + Map headerMap = new HashMap(); + headerMap.put(MailAttributeKeys.FROM, "from@example.org"); + MessageHeaders headers = new MessageHeaders(headerMap); + MimeMessage mailMessageMock = EasyMock.createNiceMock(MimeMessage.class); + EasyMock.replay(mailMessageMock); + MimeMessage mimeMessage = new MimeMessage(mailMessageMock); + mapper.mapFromMessageHeaders(headers, mimeMessage); + Address[] fromAddresses = mimeMessage.getFrom(); + assertEquals(1, fromAddresses.length); + assertEquals("from@example.org", fromAddresses[0].toString()); + } + + @Test + public void mapMultileToValuesFromHeadersToMimeMessage() throws MessagingException { + DefaultMailMessageHeaderMapper mapper = new DefaultMailMessageHeaderMapper(); + Map headerMap = new HashMap(); + String[] addressStrings = new String[] { "a@example.org", "b@example.org", "c@example.org" }; + headerMap.put(MailAttributeKeys.TO, addressStrings); + MessageHeaders headers = new MessageHeaders(headerMap); + MimeMessage mailMessageMock = EasyMock.createNiceMock(MimeMessage.class); + EasyMock.replay(mailMessageMock); + MimeMessage mimeMessage = new MimeMessage(mailMessageMock); + mapper.mapFromMessageHeaders(headers, mimeMessage); + Address[] toAddresses = mimeMessage.getRecipients(RecipientType.TO); + assertEquals(3, toAddresses.length); + assertTrue(ObjectUtils.containsElement(toAddresses, new InternetAddress("a@example.org"))); + assertTrue(ObjectUtils.containsElement(toAddresses, new InternetAddress("b@example.org"))); + assertTrue(ObjectUtils.containsElement(toAddresses, new InternetAddress("c@example.org"))); + } + +}