Skip to content

Commit ce6627f

Browse files
authored
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 ce6627f

File tree

8 files changed

+49
-72
lines changed

8 files changed

+49
-72
lines changed

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

+12-12
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.
@@ -48,7 +48,7 @@
4848
* @author Mark Fisher
4949
* @author Oleg Zhurakousky
5050
* @author Artem Bilan
51-
*
51+
* @author Ma Jiandong
5252
* @see MailHeaders
5353
*/
5454
public class MailSendingMessageHandler extends AbstractMessageHandler {
@@ -73,14 +73,14 @@ public String getComponentType() {
7373
@Override
7474
protected final void handleMessageInternal(Message<?> message) {
7575
MailMessage mailMessage = convertMessageToMailMessage(message);
76-
if (mailMessage instanceof SimpleMailMessage) {
77-
this.mailSender.send((SimpleMailMessage) mailMessage);
76+
if (mailMessage instanceof SimpleMailMessage simpleMailMessage) {
77+
this.mailSender.send(simpleMailMessage);
7878
}
79-
else if (mailMessage instanceof MimeMailMessage) {
79+
else if (mailMessage instanceof MimeMailMessage mimeMailMessage) {
8080
Assert.state(this.mailSender instanceof JavaMailSender,
8181
"this adapter requires a 'JavaMailSender' to send a 'MimeMailMessage'");
8282

83-
((JavaMailSender) this.mailSender).send(((MimeMailMessage) mailMessage).getMimeMessage());
83+
((JavaMailSender) this.mailSender).send(mimeMailMessage.getMimeMessage());
8484
}
8585
else {
8686
throw new IllegalArgumentException(
@@ -92,11 +92,11 @@ else if (mailMessage instanceof MimeMailMessage) {
9292
private MailMessage convertMessageToMailMessage(Message<?> message) {
9393
MailMessage mailMessage;
9494
Object payload = message.getPayload();
95-
if (payload instanceof MimeMessage) {
96-
mailMessage = new MimeMailMessage((MimeMessage) payload);
95+
if (payload instanceof MimeMessage mimeMessage) {
96+
mailMessage = new MimeMailMessage(mimeMessage);
9797
}
98-
else if (payload instanceof MailMessage) {
99-
mailMessage = (MailMessage) payload;
98+
else if (payload instanceof MailMessage mailMsg) {
99+
mailMessage = mailMsg;
100100
}
101101
else if (payload instanceof byte[]) {
102102
mailMessage = createMailMessageFromByteArrayMessage((Message<byte[]>) message);
@@ -168,8 +168,8 @@ private void applyHeadersToMailMessage(MailMessage mailMessage, MessageHeaders h
168168
if (to != null) {
169169
mailMessage.setTo(to);
170170
}
171-
if (mailMessage instanceof SimpleMailMessage) {
172-
Assert.state(!ObjectUtils.isEmpty(((SimpleMailMessage) mailMessage).getTo()),
171+
if (mailMessage instanceof SimpleMailMessage simpleMailMessage) {
172+
Assert.state(!ObjectUtils.isEmpty(simpleMailMessage.getTo()),
173173
"No recipient has been provided on the MailMessage or the 'MailHeaders.TO' header.");
174174
}
175175
String[] cc = retrieveHeaderValueAsStringArray(headers, MailHeaders.CC);

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

+2-2
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);

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

+1-2
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
}

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

+1-1
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.

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

+7-6
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

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

+6-5
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

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

+2-20
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.
@@ -22,19 +22,14 @@
2222

2323
import jakarta.mail.Session;
2424
import jakarta.mail.internet.MimeMessage;
25-
import org.junit.jupiter.api.Disabled;
2625
import org.junit.jupiter.api.Test;
2726
import org.mockito.Mockito;
2827

29-
import org.springframework.context.ConfigurableApplicationContext;
30-
import org.springframework.context.support.ClassPathXmlApplicationContext;
3128
import org.springframework.integration.mail.MailHeaders;
3229
import org.springframework.integration.mail.MailSendingMessageHandler;
3330
import org.springframework.integration.support.MessageBuilder;
3431
import org.springframework.mail.javamail.JavaMailSender;
3532
import org.springframework.messaging.Message;
36-
import org.springframework.messaging.MessageChannel;
37-
import org.springframework.messaging.support.GenericMessage;
3833
import org.springframework.util.FileCopyUtils;
3934

4035
import static org.assertj.core.api.Assertions.assertThat;
@@ -48,23 +43,10 @@
4843
* @author Oleg Zhurakousky
4944
* @author Gary Russell
5045
* @author Artem Bilan
51-
*
46+
* @author Ma Jiandong
5247
*/
5348
public class MessageWithContentTypeTests {
5449

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-
6850
@Test
6951
public void testMessageConversionWithHtmlAndContentType() throws Exception {
7052
JavaMailSender sender = mock(JavaMailSender.class);

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

+18-24
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,15 +17,19 @@
1717
package org.springframework.integration.mail.config;
1818

1919
import java.util.Properties;
20+
import java.util.stream.Stream;
2021

2122
import jakarta.mail.URLName;
22-
import org.junit.jupiter.api.Test;
23+
import org.junit.jupiter.params.ParameterizedTest;
24+
import org.junit.jupiter.params.provider.Arguments;
25+
import org.junit.jupiter.params.provider.MethodSource;
2326

2427
import org.springframework.beans.DirectFieldAccessor;
2528
import org.springframework.beans.factory.annotation.Autowired;
2629
import org.springframework.context.ApplicationContext;
2730
import org.springframework.integration.endpoint.SourcePollingChannelAdapter;
2831
import org.springframework.integration.mail.ImapMailReceiver;
32+
import org.springframework.integration.mail.MailReceiver;
2933
import org.springframework.integration.mail.MailReceivingMessageSource;
3034
import org.springframework.integration.mail.Pop3MailReceiver;
3135
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
@@ -36,35 +40,25 @@
3640
* @author Jonas Partner
3741
* @author Mark Fisher
3842
* @author Artem Bilan
43+
* @author Ma Jiandong
3944
*/
4045
@SpringJUnitConfig
4146
public class PollingMailSourceParserTests {
4247

4348
@Autowired
4449
private ApplicationContext context;
4550

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");
51+
static Stream<Arguments> methodArguments() {
52+
return Stream.of(
53+
Arguments.arguments("imapAdapter", ImapMailReceiver.class, "imap:foo"),
54+
Arguments.arguments("pop3Adapter", Pop3MailReceiver.class, "pop3:bar")
55+
);
6356
}
6457

65-
@Test
66-
public void pop3Adapter() {
67-
Object adapter = context.getBean("pop3Adapter");
58+
@ParameterizedTest
59+
@MethodSource("methodArguments")
60+
public void inboundChannelAdaptorTest(String adapterName, Class<MailReceiver> mailReceiverClass, String storeUri) {
61+
Object adapter = context.getBean(adapterName);
6862
assertThat(adapter.getClass()).isEqualTo(SourcePollingChannelAdapter.class);
6963
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
7064
assertThat(adapterAccessor.getPropertyValue("autoStartup")).isEqualTo(Boolean.FALSE);
@@ -73,10 +67,10 @@ public void pop3Adapter() {
7367
Object source = adapterAccessor.getPropertyValue("source");
7468
assertThat(source.getClass()).isEqualTo(MailReceivingMessageSource.class);
7569
Object receiver = new DirectFieldAccessor(source).getPropertyValue("mailReceiver");
76-
assertThat(receiver.getClass()).isEqualTo(Pop3MailReceiver.class);
70+
assertThat(receiver.getClass()).isEqualTo(mailReceiverClass);
7771
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
7872
Object url = receiverAccessor.getPropertyValue("url");
79-
assertThat(url).isEqualTo(new URLName("pop3:bar"));
73+
assertThat(url).isEqualTo(new URLName(storeUri));
8074
Properties properties = (Properties) receiverAccessor.getPropertyValue("javaMailProperties");
8175
assertThat(properties.getProperty("foo")).isEqualTo("bar");
8276
}

0 commit comments

Comments
 (0)