Skip to content

Commit a4c6e3e

Browse files
committed
spring-integration-mail minor changes:
1. use pattern matching for instanceof 2. polish unit tests Signed-off-by: Ma,Jiandong <[email protected]>
1 parent 936c4bf commit a4c6e3e

File tree

8 files changed

+50
-81
lines changed

8 files changed

+50
-81
lines changed

spring-integration-mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2024 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -18,7 +18,6 @@
1818

1919
import jakarta.mail.MessagingException;
2020
import jakarta.mail.internet.MimeMessage;
21-
2221
import org.springframework.core.io.ByteArrayResource;
2322
import org.springframework.integration.handler.AbstractMessageHandler;
2423
import org.springframework.integration.mapping.MessageMappingException;
@@ -48,7 +47,7 @@
4847
* @author Mark Fisher
4948
* @author Oleg Zhurakousky
5049
* @author Artem Bilan
51-
*
50+
* @author Ma Jiandong
5251
* @see MailHeaders
5352
*/
5453
public class MailSendingMessageHandler extends AbstractMessageHandler {
@@ -73,14 +72,14 @@ public String getComponentType() {
7372
@Override
7473
protected final void handleMessageInternal(Message<?> message) {
7574
MailMessage mailMessage = convertMessageToMailMessage(message);
76-
if (mailMessage instanceof SimpleMailMessage) {
77-
this.mailSender.send((SimpleMailMessage) mailMessage);
75+
if (mailMessage instanceof SimpleMailMessage simpleMailMessage) {
76+
this.mailSender.send(simpleMailMessage);
7877
}
79-
else if (mailMessage instanceof MimeMailMessage) {
78+
else if (mailMessage instanceof MimeMailMessage mimeMailMessage) {
8079
Assert.state(this.mailSender instanceof JavaMailSender,
8180
"this adapter requires a 'JavaMailSender' to send a 'MimeMailMessage'");
8281

83-
((JavaMailSender) this.mailSender).send(((MimeMailMessage) mailMessage).getMimeMessage());
82+
((JavaMailSender) this.mailSender).send((mimeMailMessage).getMimeMessage());
8483
}
8584
else {
8685
throw new IllegalArgumentException(
@@ -92,11 +91,11 @@ else if (mailMessage instanceof MimeMailMessage) {
9291
private MailMessage convertMessageToMailMessage(Message<?> message) {
9392
MailMessage mailMessage;
9493
Object payload = message.getPayload();
95-
if (payload instanceof MimeMessage) {
96-
mailMessage = new MimeMailMessage((MimeMessage) payload);
94+
if (payload instanceof MimeMessage mimeMessage) {
95+
mailMessage = new MimeMailMessage(mimeMessage);
9796
}
98-
else if (payload instanceof MailMessage) {
99-
mailMessage = (MailMessage) payload;
97+
else if (payload instanceof MailMessage mailMsg) {
98+
mailMessage = mailMsg;
10099
}
101100
else if (payload instanceof byte[]) {
102101
mailMessage = createMailMessageFromByteArrayMessage((Message<byte[]>) message);
@@ -168,8 +167,8 @@ private void applyHeadersToMailMessage(MailMessage mailMessage, MessageHeaders h
168167
if (to != null) {
169168
mailMessage.setTo(to);
170169
}
171-
if (mailMessage instanceof SimpleMailMessage) {
172-
Assert.state(!ObjectUtils.isEmpty(((SimpleMailMessage) mailMessage).getTo()),
170+
if (mailMessage instanceof SimpleMailMessage simpleMailMessage) {
171+
Assert.state(!ObjectUtils.isEmpty((simpleMailMessage).getTo()),
173172
"No recipient has been provided on the MailMessage or the 'MailHeaders.TO' header.");
174173
}
175174
String[] cc = retrieveHeaderValueAsStringArray(headers, MailHeaders.CC);

spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailReceiverFactoryBean.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,9 @@ private void verifyProtocol() {
244244

245245
@Override
246246
public void destroy() {
247-
if (this.receiver != null && this.receiver instanceof DisposableBean) {
247+
if (this.receiver != null && this.receiver instanceof DisposableBean disposableReceiver) {
248248
try {
249-
((DisposableBean) this.receiver).destroy();
249+
disposableReceiver.destroy();
250250
}
251251
catch (Exception e) {
252252
throw new IllegalStateException(e);

spring-integration-mail/src/main/java/org/springframework/integration/mail/support/DefaultMailHeaderMapper.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ public Map<String, Object> toHeaders(MimeMessage source) {
5252
MultiValueMap<String, String> rawHeaders = new LinkedMultiValueMap<String, String>();
5353
while (allHeaders.hasMoreElements()) {
5454
Object headerInstance = allHeaders.nextElement();
55-
if (headerInstance instanceof Header) {
56-
Header header = (Header) headerInstance;
55+
if (headerInstance instanceof Header header) {
5756
rawHeaders.add(header.getName(), header.getValue());
5857
}
5958
}

spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2024 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -33,7 +33,6 @@
3333
import java.util.logging.LogManager;
3434
import java.util.logging.LogRecord;
3535
import java.util.logging.Logger;
36-
3736
import com.icegreen.greenmail.user.GreenMailUser;
3837
import com.icegreen.greenmail.util.GreenMail;
3938
import com.icegreen.greenmail.util.GreenMailUtil;
@@ -61,10 +60,8 @@
6160
import org.junit.jupiter.api.AfterEach;
6261
import org.junit.jupiter.api.BeforeAll;
6362
import org.junit.jupiter.api.BeforeEach;
64-
import org.junit.jupiter.api.Disabled;
6563
import org.junit.jupiter.api.Test;
6664
import org.mockito.Mockito;
67-
6865
import org.springframework.beans.DirectFieldAccessor;
6966
import org.springframework.beans.factory.BeanFactory;
7067
import org.springframework.beans.factory.annotation.Autowired;
@@ -199,7 +196,6 @@ public void testIdleWithMessageMapping() throws Exception {
199196
}
200197

201198
@Test
202-
@Disabled
203199
public void testIdleWithServerDefaultSearchSimple() throws Exception {
204200
ImapMailReceiver receiver =
205201
new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getImap().getPort() + "/INBOX");

spring-integration-mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerContextTests.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
/**
4242
* @author Marius Bogoevici
4343
* @author Artem Bilan
44+
* @author Ma Jiandong
4445
*/
4546
@SpringJUnitConfig
4647
public class MailSendingMessageHandlerContextTests {
@@ -77,7 +78,7 @@ public void stringMessagesWithConfiguration() {
7778
.isEqualTo(0);
7879
assertThat(this.mailSender.getSentSimpleMailMessages().size()).as("only one simple message must be sent")
7980
.isEqualTo(1);
80-
assertThat(this.mailSender.getSentSimpleMailMessages().get(0)).as("message content different from expected")
81+
assertThat(this.mailSender.getSentSimpleMailMessages().get(0)).as("message content same as expected")
8182
.isEqualTo(mailMessage);
8283
}
8384

@@ -90,19 +91,19 @@ public void byteArrayMessage() throws Exception {
9091
.setHeader(MailHeaders.TO, MailTestsHelper.TO)
9192
.build();
9293
this.handler.handleMessage(message);
93-
assertThat(this.mailSender.getSentMimeMessages().size()).as("no mime message should have been sent")
94+
assertThat(this.mailSender.getSentMimeMessages().size()).as("only one mime message should have been sent")
9495
.isEqualTo(1);
95-
assertThat(this.mailSender.getSentSimpleMailMessages().size()).as("only one simple message must be sent")
96+
assertThat(this.mailSender.getSentSimpleMailMessages().size()).as("no simple message must be sent")
9697
.isEqualTo(0);
9798
byte[] buffer = new byte[1024];
9899
MimeMessage mimeMessage = this.mailSender.getSentMimeMessages().get(0);
99100
assertThat(mimeMessage.getContent() instanceof Multipart).as("message must be multipart").isTrue();
100101
int size = new DataInputStream(((Multipart) mimeMessage.getContent()).getBodyPart(0).getInputStream())
101102
.read(buffer);
102-
assertThat(size).as("buffer size does not match").isEqualTo(payload.length);
103+
assertThat(size).as("buffer size does match").isEqualTo(payload.length);
103104
byte[] messageContent = new byte[size];
104105
System.arraycopy(buffer, 0, messageContent, 0, payload.length);
105-
assertThat(messageContent).as("buffer content does not match").isEqualTo(payload);
106+
assertThat(messageContent).as("buffer content does match").isEqualTo(payload);
106107
assertThat(MailTestsHelper.TO.length).isEqualTo(mimeMessage.getRecipients(Message.RecipientType.TO).length);
107108
}
108109

@@ -125,7 +126,7 @@ public void mailOutboundChannelAdapterWithinChain() {
125126
.isEqualTo(0);
126127
assertThat(this.mailSender.getSentSimpleMailMessages().size()).as("only one simple message must be sent")
127128
.isEqualTo(1);
128-
assertThat(this.mailSender.getSentSimpleMailMessages().get(0)).as("message content different from expected")
129+
assertThat(this.mailSender.getSentSimpleMailMessages().get(0)).as("message content same as expected")
129130
.isEqualTo(mailMessage);
130131
}
131132

spring-integration-mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerTests.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2024 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -35,6 +35,7 @@
3535
* @author Marius Bogoevici
3636
* @author Oleg Zhurakousky
3737
* @author Artem Bilan
38+
* @author Ma Jiandong
3839
*/
3940
public class MailSendingMessageHandlerTests {
4041

@@ -60,7 +61,7 @@ public void textMessage() {
6061
assertThat(mailSender.getSentMimeMessages().size()).as("no mime message should have been sent").isEqualTo(0);
6162
assertThat(mailSender.getSentSimpleMailMessages().size()).as("only one simple message must be sent")
6263
.isEqualTo(1);
63-
assertThat(mailSender.getSentSimpleMailMessages().get(0)).as("message content different from expected")
64+
assertThat(mailSender.getSentSimpleMailMessages().get(0)).as("message content same as expected")
6465
.isEqualTo(mailMessage);
6566
}
6667

@@ -78,10 +79,10 @@ public void byteArrayMessage() throws Exception {
7879
assertThat(mimeMessage.getContent() instanceof Multipart).as("message must be multipart").isTrue();
7980
int size = new DataInputStream(((Multipart) mimeMessage.getContent()).getBodyPart(0).getInputStream())
8081
.read(buffer);
81-
assertThat(size).as("buffer size does not match").isEqualTo(payload.length);
82+
assertThat(size).as("buffer size does match").isEqualTo(payload.length);
8283
byte[] messageContent = new byte[size];
8384
System.arraycopy(buffer, 0, messageContent, 0, payload.length);
84-
assertThat(messageContent).as("buffer content does not match").isEqualTo(payload);
85+
assertThat(messageContent).as("buffer content does match").isEqualTo(payload);
8586
assertThat(MailTestsHelper.TO.length).isEqualTo(mimeMessage.getRecipients(Message.RecipientType.TO).length);
8687
}
8788

@@ -92,7 +93,7 @@ public void mailHeaders() {
9293
assertThat(mailSender.getSentMimeMessages().size()).as("no mime message should have been sent").isEqualTo(0);
9394
assertThat(mailSender.getSentSimpleMailMessages().size()).as("only one simple message must be sent")
9495
.isEqualTo(1);
95-
assertThat(mailSender.getSentSimpleMailMessages().get(0)).as("message content different from expected")
96+
assertThat(mailSender.getSentSimpleMailMessages().get(0)).as("message content same as expected")
9697
.isEqualTo(mailMessage);
9798
}
9899

spring-integration-mail/src/test/java/org/springframework/integration/mail/config/MessageWithContentTypeTests.java

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -19,22 +19,15 @@
1919
import java.io.FileReader;
2020
import java.io.StringWriter;
2121
import java.util.Properties;
22-
2322
import jakarta.mail.Session;
2423
import jakarta.mail.internet.MimeMessage;
25-
import org.junit.jupiter.api.Disabled;
2624
import org.junit.jupiter.api.Test;
2725
import org.mockito.Mockito;
28-
29-
import org.springframework.context.ConfigurableApplicationContext;
30-
import org.springframework.context.support.ClassPathXmlApplicationContext;
3126
import org.springframework.integration.mail.MailHeaders;
3227
import org.springframework.integration.mail.MailSendingMessageHandler;
3328
import org.springframework.integration.support.MessageBuilder;
3429
import org.springframework.mail.javamail.JavaMailSender;
3530
import org.springframework.messaging.Message;
36-
import org.springframework.messaging.MessageChannel;
37-
import org.springframework.messaging.support.GenericMessage;
3831
import org.springframework.util.FileCopyUtils;
3932

4033
import static org.assertj.core.api.Assertions.assertThat;
@@ -48,23 +41,10 @@
4841
* @author Oleg Zhurakousky
4942
* @author Gary Russell
5043
* @author Artem Bilan
51-
*
44+
* @author Ma Jiandong
5245
*/
5346
public class MessageWithContentTypeTests {
5447

55-
@Test
56-
@Disabled
57-
public void testSendEmail() throws Exception {
58-
ConfigurableApplicationContext ac = new ClassPathXmlApplicationContext(
59-
"MessageWithContentTypeTests-context.xml", this.getClass());
60-
MessageChannel inputChannel = ac.getBean("inputChannel", MessageChannel.class);
61-
StringWriter writer = new StringWriter();
62-
FileReader reader = new FileReader("src/test/java/org/springframework/integration/mail/config/test.html");
63-
FileCopyUtils.copy(reader, writer);
64-
inputChannel.send(new GenericMessage<>(writer.getBuffer().toString()));
65-
ac.close();
66-
}
67-
6848
@Test
6949
public void testMessageConversionWithHtmlAndContentType() throws Exception {
7050
JavaMailSender sender = mock(JavaMailSender.class);

spring-integration-mail/src/test/java/org/springframework/integration/mail/config/PollingMailSourceParserTests.java

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2024 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -17,54 +17,47 @@
1717
package org.springframework.integration.mail.config;
1818

1919
import java.util.Properties;
20-
20+
import java.util.stream.Stream;
2121
import jakarta.mail.URLName;
22-
import org.junit.jupiter.api.Test;
23-
22+
import org.junit.jupiter.params.ParameterizedTest;
23+
import org.junit.jupiter.params.provider.Arguments;
24+
import org.junit.jupiter.params.provider.MethodSource;
2425
import org.springframework.beans.DirectFieldAccessor;
2526
import org.springframework.beans.factory.annotation.Autowired;
2627
import org.springframework.context.ApplicationContext;
2728
import org.springframework.integration.endpoint.SourcePollingChannelAdapter;
2829
import org.springframework.integration.mail.ImapMailReceiver;
30+
import org.springframework.integration.mail.MailReceiver;
2931
import org.springframework.integration.mail.MailReceivingMessageSource;
3032
import org.springframework.integration.mail.Pop3MailReceiver;
3133
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
3234

3335
import static org.assertj.core.api.Assertions.assertThat;
36+
import static org.junit.jupiter.params.provider.Arguments.arguments;
3437

3538
/**
3639
* @author Jonas Partner
3740
* @author Mark Fisher
3841
* @author Artem Bilan
42+
* @author Ma Jiandong
3943
*/
4044
@SpringJUnitConfig
4145
public class PollingMailSourceParserTests {
4246

4347
@Autowired
4448
private ApplicationContext context;
4549

46-
@Test
47-
public void imapAdapter() {
48-
Object adapter = context.getBean("imapAdapter");
49-
assertThat(adapter.getClass()).isEqualTo(SourcePollingChannelAdapter.class);
50-
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
51-
assertThat(adapterAccessor.getPropertyValue("autoStartup")).isEqualTo(Boolean.FALSE);
52-
Object channel = context.getBean("channel");
53-
assertThat(adapterAccessor.getPropertyValue("outputChannel")).isEqualTo(channel);
54-
Object source = adapterAccessor.getPropertyValue("source");
55-
assertThat(source.getClass()).isEqualTo(MailReceivingMessageSource.class);
56-
Object receiver = new DirectFieldAccessor(source).getPropertyValue("mailReceiver");
57-
assertThat(receiver.getClass()).isEqualTo(ImapMailReceiver.class);
58-
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
59-
Object url = receiverAccessor.getPropertyValue("url");
60-
assertThat(url).isEqualTo(new URLName("imap:foo"));
61-
Properties properties = (Properties) receiverAccessor.getPropertyValue("javaMailProperties");
62-
assertThat(properties.getProperty("foo")).isEqualTo("bar");
50+
static Stream<Arguments> methodArguments() {
51+
return Stream.of(
52+
arguments("imapAdapter", ImapMailReceiver.class, "imap:foo"),
53+
arguments("pop3Adapter", Pop3MailReceiver.class, "pop3:bar")
54+
);
6355
}
6456

65-
@Test
66-
public void pop3Adapter() {
67-
Object adapter = context.getBean("pop3Adapter");
57+
@ParameterizedTest
58+
@MethodSource("methodArguments")
59+
public void inboundChannelAdaptorTest(String adapterName, Class<MailReceiver> mailReceiverClass, String storeUri) {
60+
Object adapter = context.getBean(adapterName);
6861
assertThat(adapter.getClass()).isEqualTo(SourcePollingChannelAdapter.class);
6962
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
7063
assertThat(adapterAccessor.getPropertyValue("autoStartup")).isEqualTo(Boolean.FALSE);
@@ -73,10 +66,10 @@ public void pop3Adapter() {
7366
Object source = adapterAccessor.getPropertyValue("source");
7467
assertThat(source.getClass()).isEqualTo(MailReceivingMessageSource.class);
7568
Object receiver = new DirectFieldAccessor(source).getPropertyValue("mailReceiver");
76-
assertThat(receiver.getClass()).isEqualTo(Pop3MailReceiver.class);
69+
assertThat(receiver.getClass()).isEqualTo(mailReceiverClass);
7770
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
7871
Object url = receiverAccessor.getPropertyValue("url");
79-
assertThat(url).isEqualTo(new URLName("pop3:bar"));
72+
assertThat(url).isEqualTo(new URLName(storeUri));
8073
Properties properties = (Properties) receiverAccessor.getPropertyValue("javaMailProperties");
8174
assertThat(properties.getProperty("foo")).isEqualTo("bar");
8275
}

0 commit comments

Comments
 (0)