spring-integration-mail minor changes
1. use pattern matching for instanceof 2. polish unit tests Signed-off-by: Ma,Jiandong <jiandong.ma.cn@gmail.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
* Copyright 2002-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -48,7 +48,7 @@ import org.springframework.util.StringUtils;
|
||||
* @author Mark Fisher
|
||||
* @author Oleg Zhurakousky
|
||||
* @author Artem Bilan
|
||||
*
|
||||
* @author Ma Jiandong
|
||||
* @see MailHeaders
|
||||
*/
|
||||
public class MailSendingMessageHandler extends AbstractMessageHandler {
|
||||
@@ -73,14 +73,14 @@ public class MailSendingMessageHandler extends AbstractMessageHandler {
|
||||
@Override
|
||||
protected final void handleMessageInternal(Message<?> message) {
|
||||
MailMessage mailMessage = convertMessageToMailMessage(message);
|
||||
if (mailMessage instanceof SimpleMailMessage) {
|
||||
this.mailSender.send((SimpleMailMessage) mailMessage);
|
||||
if (mailMessage instanceof SimpleMailMessage simpleMailMessage) {
|
||||
this.mailSender.send(simpleMailMessage);
|
||||
}
|
||||
else if (mailMessage instanceof MimeMailMessage) {
|
||||
else if (mailMessage instanceof MimeMailMessage mimeMailMessage) {
|
||||
Assert.state(this.mailSender instanceof JavaMailSender,
|
||||
"this adapter requires a 'JavaMailSender' to send a 'MimeMailMessage'");
|
||||
|
||||
((JavaMailSender) this.mailSender).send(((MimeMailMessage) mailMessage).getMimeMessage());
|
||||
((JavaMailSender) this.mailSender).send(mimeMailMessage.getMimeMessage());
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException(
|
||||
@@ -92,11 +92,11 @@ public class MailSendingMessageHandler extends AbstractMessageHandler {
|
||||
private MailMessage convertMessageToMailMessage(Message<?> message) {
|
||||
MailMessage mailMessage;
|
||||
Object payload = message.getPayload();
|
||||
if (payload instanceof MimeMessage) {
|
||||
mailMessage = new MimeMailMessage((MimeMessage) payload);
|
||||
if (payload instanceof MimeMessage mimeMessage) {
|
||||
mailMessage = new MimeMailMessage(mimeMessage);
|
||||
}
|
||||
else if (payload instanceof MailMessage) {
|
||||
mailMessage = (MailMessage) payload;
|
||||
else if (payload instanceof MailMessage mailMsg) {
|
||||
mailMessage = mailMsg;
|
||||
}
|
||||
else if (payload instanceof byte[]) {
|
||||
mailMessage = createMailMessageFromByteArrayMessage((Message<byte[]>) message);
|
||||
@@ -168,8 +168,8 @@ public class MailSendingMessageHandler extends AbstractMessageHandler {
|
||||
if (to != null) {
|
||||
mailMessage.setTo(to);
|
||||
}
|
||||
if (mailMessage instanceof SimpleMailMessage) {
|
||||
Assert.state(!ObjectUtils.isEmpty(((SimpleMailMessage) mailMessage).getTo()),
|
||||
if (mailMessage instanceof SimpleMailMessage simpleMailMessage) {
|
||||
Assert.state(!ObjectUtils.isEmpty(simpleMailMessage.getTo()),
|
||||
"No recipient has been provided on the MailMessage or the 'MailHeaders.TO' header.");
|
||||
}
|
||||
String[] cc = retrieveHeaderValueAsStringArray(headers, MailHeaders.CC);
|
||||
|
||||
@@ -244,9 +244,9 @@ public class MailReceiverFactoryBean extends AbstractFactoryBean<MailReceiver> {
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
if (this.receiver != null && this.receiver instanceof DisposableBean) {
|
||||
if (this.receiver != null && this.receiver instanceof DisposableBean disposableReceiver) {
|
||||
try {
|
||||
((DisposableBean) this.receiver).destroy();
|
||||
disposableReceiver.destroy();
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new IllegalStateException(e);
|
||||
|
||||
@@ -52,8 +52,7 @@ public class DefaultMailHeaderMapper implements HeaderMapper<MimeMessage> {
|
||||
MultiValueMap<String, String> rawHeaders = new LinkedMultiValueMap<String, String>();
|
||||
while (allHeaders.hasMoreElements()) {
|
||||
Object headerInstance = allHeaders.nextElement();
|
||||
if (headerInstance instanceof Header) {
|
||||
Header header = (Header) headerInstance;
|
||||
if (headerInstance instanceof Header header) {
|
||||
rawHeaders.add(header.getName(), header.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
* Copyright 2002-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -41,6 +41,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||
/**
|
||||
* @author Marius Bogoevici
|
||||
* @author Artem Bilan
|
||||
* @author Ma Jiandong
|
||||
*/
|
||||
@SpringJUnitConfig
|
||||
public class MailSendingMessageHandlerContextTests {
|
||||
@@ -77,7 +78,7 @@ public class MailSendingMessageHandlerContextTests {
|
||||
.isEqualTo(0);
|
||||
assertThat(this.mailSender.getSentSimpleMailMessages().size()).as("only one simple message must be sent")
|
||||
.isEqualTo(1);
|
||||
assertThat(this.mailSender.getSentSimpleMailMessages().get(0)).as("message content different from expected")
|
||||
assertThat(this.mailSender.getSentSimpleMailMessages().get(0)).as("message content same as expected")
|
||||
.isEqualTo(mailMessage);
|
||||
}
|
||||
|
||||
@@ -90,19 +91,19 @@ public class MailSendingMessageHandlerContextTests {
|
||||
.setHeader(MailHeaders.TO, MailTestsHelper.TO)
|
||||
.build();
|
||||
this.handler.handleMessage(message);
|
||||
assertThat(this.mailSender.getSentMimeMessages().size()).as("no mime message should have been sent")
|
||||
assertThat(this.mailSender.getSentMimeMessages().size()).as("only one mime message should have been sent")
|
||||
.isEqualTo(1);
|
||||
assertThat(this.mailSender.getSentSimpleMailMessages().size()).as("only one simple message must be sent")
|
||||
assertThat(this.mailSender.getSentSimpleMailMessages().size()).as("no simple message must be sent")
|
||||
.isEqualTo(0);
|
||||
byte[] buffer = new byte[1024];
|
||||
MimeMessage mimeMessage = this.mailSender.getSentMimeMessages().get(0);
|
||||
assertThat(mimeMessage.getContent() instanceof Multipart).as("message must be multipart").isTrue();
|
||||
int size = new DataInputStream(((Multipart) mimeMessage.getContent()).getBodyPart(0).getInputStream())
|
||||
.read(buffer);
|
||||
assertThat(size).as("buffer size does not match").isEqualTo(payload.length);
|
||||
assertThat(size).as("buffer size does match").isEqualTo(payload.length);
|
||||
byte[] messageContent = new byte[size];
|
||||
System.arraycopy(buffer, 0, messageContent, 0, payload.length);
|
||||
assertThat(messageContent).as("buffer content does not match").isEqualTo(payload);
|
||||
assertThat(messageContent).as("buffer content does match").isEqualTo(payload);
|
||||
assertThat(MailTestsHelper.TO.length).isEqualTo(mimeMessage.getRecipients(Message.RecipientType.TO).length);
|
||||
}
|
||||
|
||||
@@ -125,7 +126,7 @@ public class MailSendingMessageHandlerContextTests {
|
||||
.isEqualTo(0);
|
||||
assertThat(this.mailSender.getSentSimpleMailMessages().size()).as("only one simple message must be sent")
|
||||
.isEqualTo(1);
|
||||
assertThat(this.mailSender.getSentSimpleMailMessages().get(0)).as("message content different from expected")
|
||||
assertThat(this.mailSender.getSentSimpleMailMessages().get(0)).as("message content same as expected")
|
||||
.isEqualTo(mailMessage);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
* Copyright 2002-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -35,6 +35,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
* @author Marius Bogoevici
|
||||
* @author Oleg Zhurakousky
|
||||
* @author Artem Bilan
|
||||
* @author Ma Jiandong
|
||||
*/
|
||||
public class MailSendingMessageHandlerTests {
|
||||
|
||||
@@ -60,7 +61,7 @@ public class MailSendingMessageHandlerTests {
|
||||
assertThat(mailSender.getSentMimeMessages().size()).as("no mime message should have been sent").isEqualTo(0);
|
||||
assertThat(mailSender.getSentSimpleMailMessages().size()).as("only one simple message must be sent")
|
||||
.isEqualTo(1);
|
||||
assertThat(mailSender.getSentSimpleMailMessages().get(0)).as("message content different from expected")
|
||||
assertThat(mailSender.getSentSimpleMailMessages().get(0)).as("message content same as expected")
|
||||
.isEqualTo(mailMessage);
|
||||
}
|
||||
|
||||
@@ -78,10 +79,10 @@ public class MailSendingMessageHandlerTests {
|
||||
assertThat(mimeMessage.getContent() instanceof Multipart).as("message must be multipart").isTrue();
|
||||
int size = new DataInputStream(((Multipart) mimeMessage.getContent()).getBodyPart(0).getInputStream())
|
||||
.read(buffer);
|
||||
assertThat(size).as("buffer size does not match").isEqualTo(payload.length);
|
||||
assertThat(size).as("buffer size does match").isEqualTo(payload.length);
|
||||
byte[] messageContent = new byte[size];
|
||||
System.arraycopy(buffer, 0, messageContent, 0, payload.length);
|
||||
assertThat(messageContent).as("buffer content does not match").isEqualTo(payload);
|
||||
assertThat(messageContent).as("buffer content does match").isEqualTo(payload);
|
||||
assertThat(MailTestsHelper.TO.length).isEqualTo(mimeMessage.getRecipients(Message.RecipientType.TO).length);
|
||||
}
|
||||
|
||||
@@ -92,7 +93,7 @@ public class MailSendingMessageHandlerTests {
|
||||
assertThat(mailSender.getSentMimeMessages().size()).as("no mime message should have been sent").isEqualTo(0);
|
||||
assertThat(mailSender.getSentSimpleMailMessages().size()).as("only one simple message must be sent")
|
||||
.isEqualTo(1);
|
||||
assertThat(mailSender.getSentSimpleMailMessages().get(0)).as("message content different from expected")
|
||||
assertThat(mailSender.getSentSimpleMailMessages().get(0)).as("message content same as expected")
|
||||
.isEqualTo(mailMessage);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2022 the original author or authors.
|
||||
* Copyright 2002-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -22,19 +22,14 @@ import java.util.Properties;
|
||||
|
||||
import jakarta.mail.Session;
|
||||
import jakarta.mail.internet.MimeMessage;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.integration.mail.MailHeaders;
|
||||
import org.springframework.integration.mail.MailSendingMessageHandler;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
import org.springframework.mail.javamail.JavaMailSender;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.MessageChannel;
|
||||
import org.springframework.messaging.support.GenericMessage;
|
||||
import org.springframework.util.FileCopyUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -48,23 +43,10 @@ import static org.mockito.Mockito.when;
|
||||
* @author Oleg Zhurakousky
|
||||
* @author Gary Russell
|
||||
* @author Artem Bilan
|
||||
*
|
||||
* @author Ma Jiandong
|
||||
*/
|
||||
public class MessageWithContentTypeTests {
|
||||
|
||||
@Test
|
||||
@Disabled
|
||||
public void testSendEmail() throws Exception {
|
||||
ConfigurableApplicationContext ac = new ClassPathXmlApplicationContext(
|
||||
"MessageWithContentTypeTests-context.xml", this.getClass());
|
||||
MessageChannel inputChannel = ac.getBean("inputChannel", MessageChannel.class);
|
||||
StringWriter writer = new StringWriter();
|
||||
FileReader reader = new FileReader("src/test/java/org/springframework/integration/mail/config/test.html");
|
||||
FileCopyUtils.copy(reader, writer);
|
||||
inputChannel.send(new GenericMessage<>(writer.getBuffer().toString()));
|
||||
ac.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMessageConversionWithHtmlAndContentType() throws Exception {
|
||||
JavaMailSender sender = mock(JavaMailSender.class);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
* Copyright 2002-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,15 +17,19 @@
|
||||
package org.springframework.integration.mail.config;
|
||||
|
||||
import java.util.Properties;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import jakarta.mail.URLName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
||||
import org.springframework.beans.DirectFieldAccessor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.integration.endpoint.SourcePollingChannelAdapter;
|
||||
import org.springframework.integration.mail.ImapMailReceiver;
|
||||
import org.springframework.integration.mail.MailReceiver;
|
||||
import org.springframework.integration.mail.MailReceivingMessageSource;
|
||||
import org.springframework.integration.mail.Pop3MailReceiver;
|
||||
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
|
||||
@@ -36,6 +40,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
* @author Jonas Partner
|
||||
* @author Mark Fisher
|
||||
* @author Artem Bilan
|
||||
* @author Ma Jiandong
|
||||
*/
|
||||
@SpringJUnitConfig
|
||||
public class PollingMailSourceParserTests {
|
||||
@@ -43,28 +48,17 @@ public class PollingMailSourceParserTests {
|
||||
@Autowired
|
||||
private ApplicationContext context;
|
||||
|
||||
@Test
|
||||
public void imapAdapter() {
|
||||
Object adapter = context.getBean("imapAdapter");
|
||||
assertThat(adapter.getClass()).isEqualTo(SourcePollingChannelAdapter.class);
|
||||
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
|
||||
assertThat(adapterAccessor.getPropertyValue("autoStartup")).isEqualTo(Boolean.FALSE);
|
||||
Object channel = context.getBean("channel");
|
||||
assertThat(adapterAccessor.getPropertyValue("outputChannel")).isEqualTo(channel);
|
||||
Object source = adapterAccessor.getPropertyValue("source");
|
||||
assertThat(source.getClass()).isEqualTo(MailReceivingMessageSource.class);
|
||||
Object receiver = new DirectFieldAccessor(source).getPropertyValue("mailReceiver");
|
||||
assertThat(receiver.getClass()).isEqualTo(ImapMailReceiver.class);
|
||||
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
|
||||
Object url = receiverAccessor.getPropertyValue("url");
|
||||
assertThat(url).isEqualTo(new URLName("imap:foo"));
|
||||
Properties properties = (Properties) receiverAccessor.getPropertyValue("javaMailProperties");
|
||||
assertThat(properties.getProperty("foo")).isEqualTo("bar");
|
||||
static Stream<Arguments> methodArguments() {
|
||||
return Stream.of(
|
||||
Arguments.arguments("imapAdapter", ImapMailReceiver.class, "imap:foo"),
|
||||
Arguments.arguments("pop3Adapter", Pop3MailReceiver.class, "pop3:bar")
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pop3Adapter() {
|
||||
Object adapter = context.getBean("pop3Adapter");
|
||||
@ParameterizedTest
|
||||
@MethodSource("methodArguments")
|
||||
public void inboundChannelAdaptorTest(String adapterName, Class<MailReceiver> mailReceiverClass, String storeUri) {
|
||||
Object adapter = context.getBean(adapterName);
|
||||
assertThat(adapter.getClass()).isEqualTo(SourcePollingChannelAdapter.class);
|
||||
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
|
||||
assertThat(adapterAccessor.getPropertyValue("autoStartup")).isEqualTo(Boolean.FALSE);
|
||||
@@ -73,10 +67,10 @@ public class PollingMailSourceParserTests {
|
||||
Object source = adapterAccessor.getPropertyValue("source");
|
||||
assertThat(source.getClass()).isEqualTo(MailReceivingMessageSource.class);
|
||||
Object receiver = new DirectFieldAccessor(source).getPropertyValue("mailReceiver");
|
||||
assertThat(receiver.getClass()).isEqualTo(Pop3MailReceiver.class);
|
||||
assertThat(receiver.getClass()).isEqualTo(mailReceiverClass);
|
||||
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
|
||||
Object url = receiverAccessor.getPropertyValue("url");
|
||||
assertThat(url).isEqualTo(new URLName("pop3:bar"));
|
||||
assertThat(url).isEqualTo(new URLName(storeUri));
|
||||
Properties properties = (Properties) receiverAccessor.getPropertyValue("javaMailProperties");
|
||||
assertThat(properties.getProperty("foo")).isEqualTo("bar");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user