Skip to content

Commit 1bd1c13

Browse files
authored
Apply Nullability to JMS module
Related to: #10083 Signed-off-by: Jiandong Ma <[email protected]>
1 parent 1074c07 commit 1bd1c13

22 files changed

+182
-140
lines changed

spring-integration-jms/src/main/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListener.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import jakarta.jms.JMSException;
2727
import jakarta.jms.MessageProducer;
2828
import jakarta.jms.Session;
29+
import org.jspecify.annotations.Nullable;
2930

3031
import org.springframework.beans.BeansException;
3132
import org.springframework.beans.factory.BeanFactory;
@@ -56,7 +57,6 @@
5657
import org.springframework.jms.support.converter.SimpleMessageConverter;
5758
import org.springframework.jms.support.destination.DestinationResolver;
5859
import org.springframework.jms.support.destination.DynamicDestinationResolver;
59-
import org.springframework.lang.Nullable;
6060
import org.springframework.messaging.Message;
6161
import org.springframework.messaging.MessageChannel;
6262
import org.springframework.messaging.MessagingException;
@@ -96,9 +96,9 @@ public class ChannelPublishingJmsMessageListener
9696

9797
private boolean extractReplyPayload = true;
9898

99-
private Object defaultReplyDestination;
99+
private @Nullable Object defaultReplyDestination;
100100

101-
private String correlationKey;
101+
private @Nullable String correlationKey;
102102

103103
private long replyTimeToLive = jakarta.jms.Message.DEFAULT_TIME_TO_LIVE;
104104

@@ -110,14 +110,16 @@ public class ChannelPublishingJmsMessageListener
110110

111111
private DestinationResolver destinationResolver = new DynamicDestinationResolver();
112112

113-
private Expression replyToExpression;
113+
private @Nullable Expression replyToExpression;
114114

115115
private JmsHeaderMapper headerMapper = new DefaultJmsHeaderMapper();
116116

117+
@SuppressWarnings("NullAway.Init")
117118
private BeanFactory beanFactory;
118119

119120
private MessageBuilderFactory messageBuilderFactory = new DefaultMessageBuilderFactory();
120121

122+
@SuppressWarnings("NullAway.Init")
121123
private StandardEvaluationContext evaluationContext;
122124

123125
/**
@@ -174,7 +176,7 @@ public void setShouldTrack(boolean shouldTrack) {
174176
}
175177

176178
@Override
177-
public String getComponentName() {
179+
public @Nullable String getComponentName() {
178180
return this.gatewayDelegate.getComponentName();
179181
}
180182

@@ -563,7 +565,7 @@ else if (replyToValue instanceof String destinationName) {
563565
* @see #setDefaultReplyTopicName
564566
* @see #setDestinationResolver
565567
*/
566-
private Destination resolveDefaultReplyDestination(Session session) throws JMSException {
568+
private @Nullable Destination resolveDefaultReplyDestination(Session session) throws JMSException {
567569
if (this.defaultReplyDestination instanceof Destination destination) {
568570
return destination;
569571
}
@@ -600,7 +602,7 @@ private record DestinationNameHolder(String name, boolean isTopic) {
600602

601603
private class GatewayDelegate extends MessagingGatewaySupport {
602604

603-
private static final ThreadLocal<AttributeAccessor> ATTRIBUTES_HOLDER = new ThreadLocal<>();
605+
private static final ThreadLocal<@Nullable AttributeAccessor> ATTRIBUTES_HOLDER = new ThreadLocal<>();
604606

605607
@Nullable
606608
private RetryOperations retryTemplate;
@@ -621,7 +623,9 @@ private void send(jakarta.jms.Message jmsMessage, Message<?> requestMessage) {
621623
else {
622624
this.retryTemplate.execute(
623625
context -> {
624-
StaticMessageHeaderAccessor.getDeliveryAttempt(requestMessage).incrementAndGet();
626+
var deliveryAttempt = StaticMessageHeaderAccessor.getDeliveryAttempt(requestMessage);
627+
Assert.notNull(deliveryAttempt, "deliveryAttempt must not be null");
628+
deliveryAttempt.incrementAndGet();
625629
setAttributesIfNecessary(jmsMessage, requestMessage);
626630
send(requestMessage);
627631
return null;
@@ -635,7 +639,7 @@ private void send(jakarta.jms.Message jmsMessage, Message<?> requestMessage) {
635639
}
636640
}
637641

638-
private Message<?> sendAndReceiveMessage(jakarta.jms.Message jmsMessage, Message<?> requestMessage) {
642+
private @Nullable Message<?> sendAndReceiveMessage(jakarta.jms.Message jmsMessage, Message<?> requestMessage) {
639643
try {
640644
if (this.retryTemplate == null) {
641645
setAttributesIfNecessary(jmsMessage, requestMessage);
@@ -644,7 +648,9 @@ private Message<?> sendAndReceiveMessage(jakarta.jms.Message jmsMessage, Message
644648
else {
645649
return this.retryTemplate.execute(
646650
context -> {
647-
StaticMessageHeaderAccessor.getDeliveryAttempt(requestMessage).incrementAndGet();
651+
var deliveryAttempt = StaticMessageHeaderAccessor.getDeliveryAttempt(requestMessage);
652+
Assert.notNull(deliveryAttempt, "deliveryAttempt must not be null");
653+
deliveryAttempt.incrementAndGet();
648654
setAttributesIfNecessary(jmsMessage, requestMessage);
649655
return sendAndReceiveMessage(requestMessage);
650656
}, this.recoveryCallback);

spring-integration-jms/src/main/java/org/springframework/integration/jms/DynamicJmsTemplate.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.integration.jms;
1818

1919
import jakarta.jms.ConnectionFactory;
20+
import org.jspecify.annotations.Nullable;
2021

2122
import org.springframework.jms.connection.CachingConnectionFactory;
2223
import org.springframework.jms.core.JmsTemplate;
@@ -51,7 +52,7 @@ public void setReceiveTimeout(long receiveTimeout) {
5152
}
5253

5354
@Override
54-
public void setConnectionFactory(ConnectionFactory connectionFactory) {
55+
public void setConnectionFactory(@Nullable ConnectionFactory connectionFactory) {
5556
super.setConnectionFactory(connectionFactory);
5657
if (!this.receiveTimeoutExplicitlySet) {
5758
if (connectionFactory instanceof CachingConnectionFactory cachingConnectionFactory &&

spring-integration-jms/src/main/java/org/springframework/integration/jms/DynamicJmsTemplateProperties.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.integration.jms;
1818

19+
import org.jspecify.annotations.Nullable;
20+
1921
/**
2022
* @author Mark Fisher
2123
* @author Artem Bilan
@@ -24,30 +26,30 @@
2426
*/
2527
abstract class DynamicJmsTemplateProperties {
2628

27-
private static final ThreadLocal<Integer> PRIORITY_HOLDER = new ThreadLocal<>();
29+
private static final ThreadLocal<@Nullable Integer> PRIORITY_HOLDER = new ThreadLocal<>();
2830

29-
private static final ThreadLocal<Long> RECEIVE_TIMEOUT_HOLDER = new ThreadLocal<>();
31+
private static final ThreadLocal<@Nullable Long> RECEIVE_TIMEOUT_HOLDER = new ThreadLocal<>();
3032

31-
private static final ThreadLocal<Integer> DELIVER_MODE_HOLDER = new ThreadLocal<>();
33+
private static final ThreadLocal<@Nullable Integer> DELIVER_MODE_HOLDER = new ThreadLocal<>();
3234

33-
private static final ThreadLocal<Long> TIME_TO_LIVE_HOLDER = new ThreadLocal<>();
35+
private static final ThreadLocal<@Nullable Long> TIME_TO_LIVE_HOLDER = new ThreadLocal<>();
3436

3537
private DynamicJmsTemplateProperties() {
3638
}
3739

38-
public static Integer getPriority() {
40+
public static @Nullable Integer getPriority() {
3941
return PRIORITY_HOLDER.get();
4042
}
4143

42-
public static void setPriority(Integer priority) {
44+
public static void setPriority(@Nullable Integer priority) {
4345
PRIORITY_HOLDER.set(priority);
4446
}
4547

4648
public static void clearPriority() {
4749
PRIORITY_HOLDER.remove();
4850
}
4951

50-
public static Long getReceiveTimeout() {
52+
public static @Nullable Long getReceiveTimeout() {
5153
return RECEIVE_TIMEOUT_HOLDER.get();
5254
}
5355

@@ -59,7 +61,7 @@ public static void clearReceiveTimeout() {
5961
RECEIVE_TIMEOUT_HOLDER.remove();
6062
}
6163

62-
public static Integer getDeliveryMode() {
64+
public static @Nullable Integer getDeliveryMode() {
6365
return DELIVER_MODE_HOLDER.get();
6466
}
6567

@@ -71,7 +73,7 @@ public static void clearDeliveryMode() {
7173
DELIVER_MODE_HOLDER.remove();
7274
}
7375

74-
public static Long getTimeToLive() {
76+
public static @Nullable Long getTimeToLive() {
7577
return TIME_TO_LIVE_HOLDER.get();
7678
}
7779

spring-integration-jms/src/main/java/org/springframework/integration/jms/JmsDestinationPollingSource.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Map;
2020

2121
import jakarta.jms.Destination;
22+
import org.jspecify.annotations.Nullable;
2223

2324
import org.springframework.integration.endpoint.AbstractMessageSource;
2425
import org.springframework.integration.jms.util.JmsAdapterUtils;
@@ -43,15 +44,15 @@ public class JmsDestinationPollingSource extends AbstractMessageSource<Object> {
4344

4445
private final JmsTemplate jmsTemplate;
4546

46-
private volatile Destination destination;
47+
private volatile @Nullable Destination destination;
4748

48-
private volatile String destinationName;
49+
private volatile @Nullable String destinationName;
4950

50-
private volatile String messageSelector;
51+
private volatile @Nullable String messageSelector;
5152

5253
private volatile JmsHeaderMapper headerMapper = new DefaultJmsHeaderMapper();
5354

54-
private volatile String sessionAcknowledgeMode;
55+
private volatile @Nullable String sessionAcknowledgeMode;
5556

5657
private volatile boolean extractPayload = true;
5758

@@ -121,7 +122,7 @@ protected void onInit() {
121122
* {@link JmsHeaderMapper} instance to map JMS properties to the MessageHeaders.
122123
*/
123124
@Override
124-
protected Object doReceive() {
125+
protected @Nullable Object doReceive() {
125126
jakarta.jms.Message jmsMessage = doReceiveJmsMessage();
126127
if (jmsMessage == null) {
127128
return null;
@@ -147,7 +148,7 @@ protected Object doReceive() {
147148
}
148149
}
149150

150-
private jakarta.jms.Message doReceiveJmsMessage() {
151+
private jakarta.jms.@Nullable Message doReceiveJmsMessage() {
151152
jakarta.jms.Message jmsMessage;
152153
if (this.destination != null) {
153154
jmsMessage = this.jmsTemplate.receiveSelected(this.destination, this.messageSelector);

spring-integration-jms/src/main/java/org/springframework/integration/jms/JmsInboundGateway.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717
package org.springframework.integration.jms;
1818

19+
import java.util.Objects;
20+
1921
import io.micrometer.observation.ObservationRegistry;
22+
import org.jspecify.annotations.Nullable;
2023

2124
import org.springframework.beans.BeansException;
2225
import org.springframework.beans.factory.BeanFactory;
@@ -132,7 +135,7 @@ public void registerObservationRegistry(ObservationRegistry observationRegistry)
132135
}
133136

134137
@Override
135-
public void setObservationConvention(MessageRequestReplyReceiverObservationConvention observationConvention) {
138+
public void setObservationConvention(@Nullable MessageRequestReplyReceiverObservationConvention observationConvention) {
136139
super.setObservationConvention(observationConvention);
137140
this.endpoint.getListener().setRequestReplyObservationConvention(observationConvention);
138141
}
@@ -156,7 +159,7 @@ public void setBeanFactory(BeanFactory beanFactory) {
156159

157160
@Override
158161
protected void onInit() {
159-
this.endpoint.setComponentName(getComponentName());
162+
this.endpoint.setComponentName(Objects.requireNonNull(getComponentName()));
160163
this.endpoint.afterPropertiesSet();
161164
}
162165

spring-integration-jms/src/main/java/org/springframework/integration/jms/JmsMessageDrivenEndpoint.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717
package org.springframework.integration.jms;
1818

19+
import java.util.Objects;
20+
1921
import io.micrometer.observation.ObservationRegistry;
22+
import org.jspecify.annotations.Nullable;
2023

2124
import org.springframework.beans.BeansException;
2225
import org.springframework.context.ApplicationContext;
@@ -48,7 +51,7 @@ public class JmsMessageDrivenEndpoint extends MessageProducerSupport implements
4851

4952
private final ChannelPublishingJmsMessageListener listener;
5053

51-
private String sessionAcknowledgeMode;
54+
private @Nullable String sessionAcknowledgeMode;
5255

5356
private boolean shutdownContainerOnStop = true;
5457

@@ -175,7 +178,7 @@ public void registerObservationRegistry(ObservationRegistry observationRegistry)
175178
}
176179

177180
@Override
178-
public void setObservationConvention(MessageReceiverObservationConvention observationConvention) {
181+
public void setObservationConvention(@Nullable MessageReceiverObservationConvention observationConvention) {
179182
super.setObservationConvention(observationConvention);
180183
this.listener.setReceiverObservationConvention(observationConvention);
181184
}
@@ -218,7 +221,7 @@ protected void onInit() {
218221
this.listenerContainer.setSessionAcknowledgeMode(acknowledgeMode);
219222
}
220223
}
221-
this.listener.setComponentName(getComponentName());
224+
this.listener.setComponentName(Objects.requireNonNull(getComponentName()));
222225
}
223226

224227
@Override

0 commit comments

Comments
 (0)