Skip to content

Commit 60f453e

Browse files
committed
Upgrade to Jakarta EE 10
* Fix mail module to fit to the latest mail API requirements * Fix the last Sonar smell in the `SmbShare` * Remove redundant dependency for `hamcrest-core` in various modules
1 parent 053c86a commit 60f453e

File tree

4 files changed

+73
-57
lines changed

4 files changed

+73
-57
lines changed

build.gradle

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,15 @@ ext {
7070
groovyVersion = '4.0.6'
7171
hamcrestVersion = '2.2'
7272
hazelcastVersion = '5.1.4'
73-
hibernateVersion = '6.1.4.Final'
73+
hibernateVersion = '6.1.5.Final'
7474
hsqldbVersion = '2.7.0'
7575
h2Version = '2.1.214'
7676
jacksonVersion = '2.14.0'
77-
jaxbVersion = '3.0.2'
77+
jaxbVersion = '4.0.1'
7878
jcifsVersion = '2.1.32'
7979
jeroMqVersion = '0.5.2'
80-
jmsApiVersion = '3.0.0'
81-
jpaApiVersion = '3.0.3'
80+
jmsApiVersion = '3.1.0'
81+
jpaApiVersion = '3.1.0'
8282
jrubyVersion = '9.3.8.0'
8383
jsonpathVersion = '2.7.0'
8484
junit4Version = '4.13.2'
@@ -88,7 +88,7 @@ ext {
8888
kryoVersion = '5.3.0'
8989
lettuceVersion = '6.2.1.RELEASE'
9090
log4jVersion = '2.19.0'
91-
mailVersion = '2.0.1'
91+
mailVersion = '1.0.0'
9292
micrometerVersion = '1.10.0'
9393
micrometerTracingVersion = '1.0.0'
9494
mockitoVersion = '4.8.0'
@@ -551,7 +551,6 @@ project('spring-integration-core') {
551551
optionalApi 'org.jetbrains.kotlinx:kotlinx-coroutines-reactor'
552552

553553
testImplementation "org.aspectj:aspectjweaver:$aspectjVersion"
554-
testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
555554
testImplementation 'io.micrometer:micrometer-observation-test'
556555
testImplementation ('io.micrometer:micrometer-tracing-integration-test') {
557556
exclude group: 'io.opentelemetry'
@@ -621,7 +620,6 @@ project('spring-integration-ftp') {
621620
optionalApi "org.apache.ftpserver:ftpserver-core:$ftpServerVersion"
622621

623622
testImplementation project(':spring-integration-file').sourceSets.test.output
624-
testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
625623
}
626624
}
627625

@@ -698,7 +696,6 @@ project('spring-integration-ip') {
698696
api project(':spring-integration-core')
699697
testImplementation project(':spring-integration-stream')
700698
testImplementation project(':spring-integration-event')
701-
testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
702699

703700
testRuntimeOnly "com.esotericsoftware:kryo:$kryoVersion"
704701
testRuntimeOnly 'com.fasterxml.jackson.core:jackson-databind'
@@ -761,14 +758,13 @@ project('spring-integration-jpa') {
761758
dependencies {
762759
api project(':spring-integration-core')
763760
api 'org.springframework:spring-orm'
764-
optionalApi "org.eclipse.persistence:org.eclipse.persistence.jpa:$jpaApiVersion"
761+
optionalApi "jakarta.persistence:jakarta.persistence-api:$jpaApiVersion"
765762

766763
testImplementation('org.springframework.data:spring-data-jpa') {
767764
exclude group: 'org.springframework'
768765
}
769766
testImplementation "com.h2database:h2:$h2Version"
770767
testImplementation "org.hibernate.orm:hibernate-core:$hibernateVersion"
771-
testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
772768
}
773769
}
774770

@@ -781,7 +777,6 @@ project('spring-integration-kafka') {
781777
}
782778

783779
testImplementation "org.springframework.kafka:spring-kafka-test:$springKafkaVersion"
784-
testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
785780
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
786781
}
787782
}
@@ -792,8 +787,10 @@ project('spring-integration-mail') {
792787
api project(':spring-integration-core')
793788
api 'org.springframework:spring-context-support'
794789

795-
providedImplementation "com.sun.mail:jakarta.mail:$mailVersion"
790+
providedImplementation "org.eclipse.angus:jakarta.mail:$mailVersion"
791+
796792
testImplementation "com.icegreen:greenmail:$greenmailVersion"
793+
797794
testRuntimeOnly 'org.apache.logging.log4j:log4j-jul'
798795
}
799796
}
@@ -820,8 +817,8 @@ project('spring-integration-r2dbc') {
820817
exclude group: 'org.springframework'
821818
}
822819
api 'org.springframework:spring-r2dbc'
820+
823821
testImplementation "io.r2dbc:r2dbc-h2:$r2dbch2Version"
824-
testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
825822
}
826823
}
827824

@@ -846,7 +843,6 @@ project('spring-integration-redis') {
846843
}
847844

848845
testImplementation "io.lettuce:lettuce-core:$lettuceVersion"
849-
testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
850846
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
851847
}
852848

@@ -1036,9 +1032,7 @@ project('spring-integration-ws') {
10361032
testImplementation "jakarta.jms:jakarta.jms-api:$jmsApiVersion"
10371033
testImplementation "org.igniterealtime.smack:smack-tcp:$smackVersion"
10381034
testImplementation "org.igniterealtime.smack:smack-extensions:$smackVersion"
1039-
testImplementation "jakarta.mail:jakarta.mail-api:$mailVersion"
1040-
1041-
testRuntimeOnly "com.sun.mail:jakarta.mail:$mailVersion"
1035+
testImplementation "org.eclipse.angus:angus-mail:$mailVersion"
10421036
}
10431037
}
10441038

@@ -1083,8 +1077,6 @@ project('spring-integration-zeromq') {
10831077
api "org.zeromq:jeromq:$jeroMqVersion"
10841078

10851079
optionalApi 'com.fasterxml.jackson.core:jackson-databind'
1086-
1087-
testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
10881080
}
10891081
}
10901082

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

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2021 the original author or authors.
2+
* Copyright 2002-2022 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.
@@ -270,8 +270,8 @@ public void receiveAndMarkAsReadDontDelete() throws Exception {
270270
user.deliver(GreenMailUtil.createTextEmail("user", "sender", "subject", "body",
271271
imapIdleServer.getImap().getServerSetup()));
272272
AbstractMailReceiver receiver = new ImapMailReceiver();
273-
Message msg1 = mock(MimeMessage.class);
274-
Message msg2 = mock(MimeMessage.class);
273+
Message msg1 = spy(GreenMailUtil.newMimeMessage("test1"));
274+
Message msg2 = spy(GreenMailUtil.newMimeMessage("test2"));
275275
receiver = receiveAndMarkAsReadDontDeleteGuts(receiver, msg1, msg2);
276276
verify(msg1, times(1)).setFlag(Flag.SEEN, true);
277277
verify(msg2, times(1)).setFlag(Flag.SEEN, true);
@@ -310,11 +310,11 @@ private AbstractMailReceiver receiveAndMarkAsReadDontDeleteGuts(AbstractMailRece
310310
return receiver;
311311
}
312312

313-
@Test // INT-2991 Flag.SEEN was set twice when a filter is used
313+
@Test
314314
public void receiveAndMarkAsReadDontDeletePassingFilter() throws Exception {
315315
AbstractMailReceiver receiver = new ImapMailReceiver();
316-
Message msg1 = mock(MimeMessage.class);
317-
Message msg2 = mock(MimeMessage.class);
316+
Message msg1 = spy(GreenMailUtil.newMimeMessage("test1"));
317+
Message msg2 = spy(GreenMailUtil.newMimeMessage("test2"));
318318
Expression selectorExpression = new SpelExpressionParser().parseExpression("true");
319319
receiver.setSelectorExpression(selectorExpression);
320320
receiver = receiveAndMarkAsReadDontDeleteGuts(receiver, msg1, msg2);
@@ -323,11 +323,11 @@ public void receiveAndMarkAsReadDontDeletePassingFilter() throws Exception {
323323
verify(receiver, times(0)).deleteMessages(Mockito.any());
324324
}
325325

326-
@Test // INT-2991 filtered messages were marked SEEN
326+
@Test
327327
public void receiveAndMarkAsReadDontDeleteFiltered() throws Exception {
328328
AbstractMailReceiver receiver = new ImapMailReceiver();
329-
Message msg1 = mock(MimeMessage.class);
330-
Message msg2 = mock(MimeMessage.class);
329+
Message msg1 = spy(GreenMailUtil.newMimeMessage("test1"));
330+
Message msg2 = spy(GreenMailUtil.newMimeMessage("test2"));
331331
given(msg2.getSubject()).willReturn("foo"); // should not be marked seen
332332
Expression selectorExpression = new SpelExpressionParser()
333333
.parseExpression("subject == null OR !subject.equals('foo')");
@@ -401,8 +401,8 @@ public void receiveMarkAsReadAndDelete() throws Exception {
401401
given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
402402
folderField.set(receiver, folder);
403403

404-
Message msg1 = mock(MimeMessage.class);
405-
Message msg2 = mock(MimeMessage.class);
404+
Message msg1 = spy(GreenMailUtil.newMimeMessage("test1"));
405+
Message msg2 = spy(GreenMailUtil.newMimeMessage("test2"));
406406
final Message[] messages = new Message[]{ msg1, msg2 };
407407
willAnswer(invocation -> {
408408
DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock());
@@ -437,8 +437,8 @@ public void receiveAndDontMarkAsRead() throws Exception {
437437
folderField.set(receiver, folder);
438438

439439

440-
Message msg1 = mock(MimeMessage.class);
441-
Message msg2 = mock(MimeMessage.class);
440+
Message msg1 = spy(GreenMailUtil.newMimeMessage("test1"));
441+
Message msg2 = spy(GreenMailUtil.newMimeMessage("test2"));
442442
final Message[] messages = new Message[]{ msg1, msg2 };
443443
willAnswer(invocation -> null).given(receiver).openFolder();
444444

@@ -466,8 +466,8 @@ public void receiveAndDontMarkAsReadButDelete() throws Exception {
466466
given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
467467
folderField.set(receiver, folder);
468468

469-
Message msg1 = mock(MimeMessage.class);
470-
Message msg2 = mock(MimeMessage.class);
469+
Message msg1 = spy(GreenMailUtil.newMimeMessage("test1"));
470+
Message msg2 = spy(GreenMailUtil.newMimeMessage("test2"));
471471
final Message[] messages = new Message[]{ msg1, msg2 };
472472
willAnswer(invocation -> {
473473
DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock());
@@ -502,8 +502,8 @@ public void receiveAndIgnoreMarkAsReadDontDelete() throws Exception {
502502
given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
503503
folderField.set(receiver, folder);
504504

505-
Message msg1 = mock(MimeMessage.class);
506-
Message msg2 = mock(MimeMessage.class);
505+
Message msg1 = spy(GreenMailUtil.newMimeMessage("test1"));
506+
Message msg2 = spy(GreenMailUtil.newMimeMessage("test2"));
507507
final Message[] messages = new Message[]{ msg1, msg2 };
508508
willAnswer(invocation -> {
509509
DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock());
@@ -536,7 +536,7 @@ public void testMessageHistory() throws Exception {
536536
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
537537
adapterAccessor.setPropertyValue("mailReceiver", receiver);
538538

539-
MimeMessage mailMessage = mock(MimeMessage.class);
539+
Message mailMessage = spy(GreenMailUtil.newMimeMessage("test1"));
540540
Flags flags = mock(Flags.class);
541541
given(mailMessage.getFlags()).willReturn(flags);
542542
final Message[] messages = new Message[]{ mailMessage };
@@ -604,7 +604,7 @@ protected Object handleRequestMessage(org.springframework.messaging.Message<?> r
604604
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
605605
adapterAccessor.setPropertyValue("mailReceiver", receiver);
606606

607-
MimeMessage mailMessage = mock(MimeMessage.class);
607+
Message mailMessage = spy(GreenMailUtil.newMimeMessage("test1"));
608608
Flags flags = mock(Flags.class);
609609
given(mailMessage.getFlags()).willReturn(flags);
610610
final Message[] messages = new Message[]{ mailMessage };
@@ -651,7 +651,7 @@ public void testNoInitialIdleDelayWhenRecentNotSupported() throws Exception {
651651

652652
willAnswer(invocation -> folder).given(receiver).getFolder();
653653

654-
MimeMessage mailMessage = mock(MimeMessage.class);
654+
Message mailMessage = spy(GreenMailUtil.newMimeMessage("test1"));
655655
Flags flags = mock(Flags.class);
656656
given(mailMessage.getFlags()).willReturn(flags);
657657
final Message[] messages = new Message[]{ mailMessage };
@@ -724,7 +724,7 @@ public void testInitialIdleDelayWhenRecentIsSupported() throws Exception {
724724

725725
willAnswer(invocation -> folder).given(receiver).getFolder();
726726

727-
MimeMessage mailMessage = mock(MimeMessage.class);
727+
Message mailMessage = spy(GreenMailUtil.newMimeMessage("test1"));
728728
Flags flags = mock(Flags.class);
729729
given(mailMessage.getFlags()).willReturn(flags);
730730
final Message[] messages = new Message[]{ mailMessage };
@@ -864,7 +864,7 @@ private Folder testAttachmentsGuts(final ImapMailReceiver receiver) throws Messa
864864
given(folder.exists()).willReturn(true);
865865
given(folder.isOpen()).willReturn(true);
866866

867-
Message message = new MimeMessage(null, new ClassPathResource("test.mail").getInputStream());
867+
Message message = GreenMailUtil.newMimeMessage(new ClassPathResource("test.mail").getInputStream());
868868
given(folder.search(Mockito.any())).willReturn(new Message[]{ message });
869869
given(store.getFolder(Mockito.any(URLName.class))).willReturn(folder);
870870
given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
@@ -878,8 +878,8 @@ private Folder testAttachmentsGuts(final ImapMailReceiver receiver) throws Messa
878878

879879
@Test
880880
public void testNullMessages() throws Exception {
881-
Message message1 = mock(Message.class);
882-
Message message2 = mock(Message.class);
881+
Message message1 = spy(GreenMailUtil.newMimeMessage("test1"));
882+
Message message2 = spy(GreenMailUtil.newMimeMessage("test2"));
883883
final Message[] messages1 = new Message[]{ null, null, message1 };
884884
final Message[] messages2 = new Message[]{ message2 };
885885
final SearchTermStrategy searchTermStrategy = mock(SearchTermStrategy.class);

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

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2021 the original author or authors.
2+
* Copyright 2002-2022 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.
@@ -29,16 +29,18 @@
2929
import jakarta.mail.Flags.Flag;
3030
import jakarta.mail.Folder;
3131
import jakarta.mail.Message;
32-
import jakarta.mail.internet.MimeMessage;
3332

3433
import org.junit.jupiter.api.Test;
3534

3635
import org.springframework.beans.DirectFieldAccessor;
3736
import org.springframework.beans.factory.BeanFactory;
3837

38+
import com.icegreen.greenmail.util.GreenMailUtil;
39+
3940
/**
4041
* @author Oleg Zhurakousky
4142
* @author Gary Russell
43+
* @author Artem Bilan
4244
*
4345
*/
4446
public class Pop3MailReceiverTests {
@@ -57,9 +59,9 @@ public void receiveAndDelete() throws Exception {
5759
when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER));
5860
folderField.set(receiver, folder);
5961

60-
Message msg1 = mock(MimeMessage.class);
61-
Message msg2 = mock(MimeMessage.class);
62-
final Message[] messages = new Message[] { msg1, msg2 };
62+
Message msg1 = spy(GreenMailUtil.newMimeMessage("test1"));
63+
Message msg2 = spy(GreenMailUtil.newMimeMessage("test2"));
64+
final Message[] messages = new Message[]{ msg1, msg2 };
6365
doAnswer(invocation -> {
6466
DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock());
6567
int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode");
@@ -92,9 +94,9 @@ public void receiveAndDontDelete() throws Exception {
9294
when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER));
9395
folderField.set(receiver, folder);
9496

95-
Message msg1 = mock(MimeMessage.class);
96-
Message msg2 = mock(MimeMessage.class);
97-
final Message[] messages = new Message[] { msg1, msg2 };
97+
Message msg1 = spy(GreenMailUtil.newMimeMessage("test1"));
98+
Message msg2 = spy(GreenMailUtil.newMimeMessage("test2"));
99+
final Message[] messages = new Message[]{ msg1, msg2 };
98100
doAnswer(invocation -> null).when(receiver).openFolder();
99101

100102
doAnswer(invocation -> messages).when(receiver).searchForNewMessages();
@@ -119,9 +121,9 @@ public void receiveAndDontSetDeleteWithUrl() throws Exception {
119121
when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER));
120122
folderField.set(receiver, folder);
121123

122-
Message msg1 = mock(MimeMessage.class);
123-
Message msg2 = mock(MimeMessage.class);
124-
final Message[] messages = new Message[] { msg1, msg2 };
124+
Message msg1 = spy(GreenMailUtil.newMimeMessage("test1"));
125+
Message msg2 = spy(GreenMailUtil.newMimeMessage("test2"));
126+
final Message[] messages = new Message[]{ msg1, msg2 };
125127
doAnswer(invocation -> null).when(receiver).openFolder();
126128

127129
doAnswer(invocation -> messages).when(receiver).searchForNewMessages();
@@ -146,9 +148,9 @@ public void receiveAndDontSetDeleteWithoutUrl() throws Exception {
146148
when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER));
147149
folderField.set(receiver, folder);
148150

149-
Message msg1 = mock(MimeMessage.class);
150-
Message msg2 = mock(MimeMessage.class);
151-
final Message[] messages = new Message[] { msg1, msg2 };
151+
Message msg1 = spy(GreenMailUtil.newMimeMessage("test1"));
152+
Message msg2 = spy(GreenMailUtil.newMimeMessage("test2"));
153+
final Message[] messages = new Message[]{ msg1, msg2 };
152154
doAnswer(invocation -> null).when(receiver).openFolder();
153155

154156
doAnswer(invocation -> messages).when(receiver).searchForNewMessages();

spring-integration-smb/src/main/java/org/springframework/integration/smb/session/SmbShare.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
* @author Markus Spann
4242
* @author Gregory Bragg
4343
* @author Adam Jones
44+
* @author Artem Bilan
4445
*
4546
* @since 6.0
4647
*/
@@ -139,4 +140,25 @@ public synchronized void close() {
139140
super.close();
140141
}
141142

143+
/**
144+
* Tests to see if two {@link SmbShare} objects are equal.
145+
* Relies on a super implementation.
146+
* @param other another {@link SmbShare} object to compare for equality.
147+
* @return equality result.
148+
*/
149+
@Override
150+
public boolean equals(Object other) { // NOSONAR
151+
return super.equals(other);
152+
}
153+
154+
155+
/**
156+
* Return a cache code from the super class.
157+
* @return A hashcode for this share
158+
*/
159+
@Override
160+
public int hashCode() { // NOSONAR
161+
return super.hashCode();
162+
}
163+
142164
}

0 commit comments

Comments
 (0)