From 29aa2261c19b7afbae50b6a8351abca0359f3d78 Mon Sep 17 00:00:00 2001 From: "Ma,Jiandong" Date: Sat, 12 Apr 2025 01:36:53 +0800 Subject: [PATCH] spring-integration-mail minor changes: 1. use pattern matching for instanceof 2. polish unit tests Signed-off-by: Ma,Jiandong --- .../mail/MailSendingMessageHandler.java | 24 +++++------ .../mail/config/MailReceiverFactoryBean.java | 4 +- .../mail/support/DefaultMailHeaderMapper.java | 3 +- .../mail/ImapMailReceiverTests.java | 2 +- ...MailSendingMessageHandlerContextTests.java | 13 +++--- .../mail/MailSendingMessageHandlerTests.java | 11 ++--- .../config/MessageWithContentTypeTests.java | 22 +--------- .../config/PollingMailSourceParserTests.java | 42 ++++++++----------- 8 files changed, 49 insertions(+), 72 deletions(-) diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java index d971c15f2b7..755c347a6eb 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java @@ -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 @@ * @author Mark Fisher * @author Oleg Zhurakousky * @author Artem Bilan - * + * @author Ma Jiandong * @see MailHeaders */ public class MailSendingMessageHandler extends AbstractMessageHandler { @@ -73,14 +73,14 @@ public String getComponentType() { @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 @@ else if (mailMessage instanceof MimeMailMessage) { 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) message); @@ -168,8 +168,8 @@ private void applyHeadersToMailMessage(MailMessage mailMessage, MessageHeaders h 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); diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailReceiverFactoryBean.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailReceiverFactoryBean.java index 23eb391b179..11b029b5747 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailReceiverFactoryBean.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailReceiverFactoryBean.java @@ -244,9 +244,9 @@ private void verifyProtocol() { @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); diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/support/DefaultMailHeaderMapper.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/support/DefaultMailHeaderMapper.java index 50f801d85be..b96a0f22561 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/support/DefaultMailHeaderMapper.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/support/DefaultMailHeaderMapper.java @@ -52,8 +52,7 @@ public Map toHeaders(MimeMessage source) { MultiValueMap rawHeaders = new LinkedMultiValueMap(); 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()); } } diff --git a/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java b/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java index 2b5dba0e47d..76f5a90a662 100644 --- a/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java +++ b/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java @@ -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. diff --git a/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerContextTests.java b/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerContextTests.java index 80ca0aa4de7..f5c730494f3 100644 --- a/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerContextTests.java +++ b/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerContextTests.java @@ -41,6 +41,7 @@ /** * @author Marius Bogoevici * @author Artem Bilan + * @author Ma Jiandong */ @SpringJUnitConfig public class MailSendingMessageHandlerContextTests { @@ -77,7 +78,7 @@ public void stringMessagesWithConfiguration() { .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 void byteArrayMessage() throws Exception { .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 void mailOutboundChannelAdapterWithinChain() { .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); } diff --git a/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerTests.java b/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerTests.java index 19d9aae2cc9..430c75fc0b8 100644 --- a/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerTests.java +++ b/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerTests.java @@ -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 @@ * @author Marius Bogoevici * @author Oleg Zhurakousky * @author Artem Bilan + * @author Ma Jiandong */ public class MailSendingMessageHandlerTests { @@ -60,7 +61,7 @@ public void textMessage() { 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 void byteArrayMessage() throws Exception { 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 void mailHeaders() { 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); } diff --git a/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/MessageWithContentTypeTests.java b/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/MessageWithContentTypeTests.java index aea2eae5cab..04bcbb5bda1 100644 --- a/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/MessageWithContentTypeTests.java +++ b/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/MessageWithContentTypeTests.java @@ -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 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 @@ * @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); diff --git a/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/PollingMailSourceParserTests.java b/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/PollingMailSourceParserTests.java index 83eab20d282..af876072d8a 100644 --- a/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/PollingMailSourceParserTests.java +++ b/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/PollingMailSourceParserTests.java @@ -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 @@ * @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 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 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 void pop3Adapter() { 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"); }