Skip to content

Commit 18a0068

Browse files
committed
Add jspecify Nullability checks to SI
* Update formating errors from previous commits * Remove ignore SuppressWarning flags for methods that have been updated to be null safe * Make sure added private methods in tests are static * Update tests so they will succeed after the addition of nullification * Remove Disable from tests * Add appropriate beans, BeanFactories to tests that now fail because of nullify * Remove Mock and use createTestApplicationContext * Apply fixes recommended by Artem * Create environment such that the tests have the beans necessary to attain their test target * Update the TestApplicationContainerAware so that it can handle multiple context refreshes Since gradle can run multiple tests across multiple threads the static context can be refreshed multiple times. Thus we need to add code to handle the potential exception * You will note that are few classes where mocking is used instead of the components of TestApplicationContextAware. This is because test relied on mocking for additional setup of the test or checks This PR participates in the nullification issue: #10083
1 parent aa5432c commit 18a0068

File tree

188 files changed

+1457
-1057
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

188 files changed

+1457
-1057
lines changed

spring-integration-amqp/src/test/java/org/springframework/integration/amqp/inbound/InboundEndpointTests.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import org.springframework.integration.json.ObjectToJsonTransformer;
6060
import org.springframework.integration.mapping.support.JsonHeaders;
6161
import org.springframework.integration.support.MessageBuilder;
62+
import org.springframework.integration.test.context.TestApplicationContextAware;
6263
import org.springframework.integration.transformer.MessageTransformingHandler;
6364
import org.springframework.integration.transformer.Transformer;
6465
import org.springframework.messaging.Message;
@@ -86,7 +87,7 @@
8687
*
8788
* @since 3.0
8889
*/
89-
public class InboundEndpointTests {
90+
public class InboundEndpointTests implements TestApplicationContextAware {
9091

9192
@Test
9293
public void testInt2809JavaTypePropertiesToAmqp() throws Exception {
@@ -254,6 +255,7 @@ public Object fromMessage(org.springframework.amqp.core.Message message) throws
254255
}
255256

256257
});
258+
adapter.setBeanFactory(CONTEXT);
257259
adapter.afterPropertiesSet();
258260
org.springframework.amqp.core.Message message = mock(org.springframework.amqp.core.Message.class);
259261
MessageProperties props = new MessageProperties();
@@ -310,6 +312,7 @@ public Object fromMessage(org.springframework.amqp.core.Message message) throws
310312
}
311313

312314
});
315+
adapter.setBeanFactory(CONTEXT);
313316
adapter.afterPropertiesSet();
314317
org.springframework.amqp.core.Message message = mock(org.springframework.amqp.core.Message.class);
315318
MessageProperties props = new MessageProperties();
@@ -348,6 +351,7 @@ public void testRetryWithinOnMessageAdapter() throws Exception {
348351
ErrorMessageSendingRecoverer recoveryCallback = new ErrorMessageSendingRecoverer(errors);
349352
recoveryCallback.setErrorMessageStrategy(new AmqpMessageHeaderErrorMessageStrategy());
350353
adapter.setRecoveryCallback(recoveryCallback);
354+
adapter.setBeanFactory(CONTEXT);
351355
adapter.afterPropertiesSet();
352356
ChannelAwareMessageListener listener = (ChannelAwareMessageListener) container.getMessageListener();
353357
listener.onMessage(org.springframework.amqp.core.MessageBuilder.withBody("foo".getBytes())
@@ -380,6 +384,7 @@ public void testRetryWithMessageRecovererOnMessageAdapter() throws Exception {
380384
recoveredError.set(cause);
381385
recoveredLatch.countDown();
382386
});
387+
adapter.setBeanFactory(CONTEXT);
383388
adapter.afterPropertiesSet();
384389
ChannelAwareMessageListener listener = (ChannelAwareMessageListener) container.getMessageListener();
385390
org.springframework.amqp.core.Message amqpMessage =
@@ -409,6 +414,7 @@ public void testRetryWithinOnMessageGateway() throws Exception {
409414
ErrorMessageSendingRecoverer recoveryCallback = new ErrorMessageSendingRecoverer(errors);
410415
recoveryCallback.setErrorMessageStrategy(new AmqpMessageHeaderErrorMessageStrategy());
411416
adapter.setRecoveryCallback(recoveryCallback);
417+
adapter.setBeanFactory(CONTEXT);
412418
adapter.afterPropertiesSet();
413419
ChannelAwareMessageListener listener = (ChannelAwareMessageListener) container.getMessageListener();
414420
listener.onMessage(org.springframework.amqp.core.MessageBuilder.withBody("foo".getBytes())
@@ -441,6 +447,7 @@ public void testRetryWithMessageRecovererOnMessageGateway() throws Exception {
441447
recoveredError.set(cause);
442448
recoveredLatch.countDown();
443449
});
450+
adapter.setBeanFactory(CONTEXT);
444451
adapter.afterPropertiesSet();
445452
ChannelAwareMessageListener listener = (ChannelAwareMessageListener) container.getMessageListener();
446453
org.springframework.amqp.core.Message amqpMessage =
@@ -467,6 +474,7 @@ public void testBatchAdapter() throws Exception {
467474
AmqpInboundChannelAdapter adapter = new AmqpInboundChannelAdapter(container);
468475
QueueChannel out = new QueueChannel();
469476
adapter.setOutputChannel(out);
477+
adapter.setBeanFactory(CONTEXT);
470478
adapter.afterPropertiesSet();
471479
ChannelAwareMessageListener listener = (ChannelAwareMessageListener) container.getMessageListener();
472480
SimpleBatchingStrategy bs = new SimpleBatchingStrategy(2, 10_000, 10_000L);
@@ -493,6 +501,7 @@ public void testBatchGateway() throws Exception {
493501
gateway.setRequestChannel(out);
494502
gateway.setBindSourceMessage(true);
495503
gateway.setReplyTimeout(0);
504+
gateway.setBeanFactory(CONTEXT);
496505
gateway.afterPropertiesSet();
497506
ChannelAwareMessageListener listener = (ChannelAwareMessageListener) container.getMessageListener();
498507
SimpleBatchingStrategy bs = new SimpleBatchingStrategy(2, 10_000, 10_000L);
@@ -521,6 +530,7 @@ public void testConsumerBatchExtract() {
521530
adapter.setOutputChannel(out);
522531
adapter.setBatchMode(BatchMode.EXTRACT_PAYLOADS_WITH_HEADERS);
523532
adapter.setHeaderNameForBatchedHeaders("some_batch_headers");
533+
adapter.setBeanFactory(CONTEXT);
524534
adapter.afterPropertiesSet();
525535
ChannelAwareBatchMessageListener listener = (ChannelAwareBatchMessageListener) container.getMessageListener();
526536
MessageProperties messageProperties = new MessageProperties();
@@ -544,6 +554,7 @@ public void testConsumerBatch() {
544554
AmqpInboundChannelAdapter adapter = new AmqpInboundChannelAdapter(container);
545555
QueueChannel out = new QueueChannel();
546556
adapter.setOutputChannel(out);
557+
adapter.setBeanFactory(CONTEXT);
547558
adapter.afterPropertiesSet();
548559
ChannelAwareBatchMessageListener listener = (ChannelAwareBatchMessageListener) container.getMessageListener();
549560
MessageProperties messageProperties = new MessageProperties();
@@ -564,6 +575,7 @@ public void testConsumerBatchAndWrongMessageRecoverer() {
564575
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(mock());
565576
container.setConsumerBatchEnabled(true);
566577
AmqpInboundChannelAdapter adapter = new AmqpInboundChannelAdapter(container);
578+
adapter.setBeanFactory(CONTEXT);
567579
adapter.setRetryTemplate(new RetryTemplate());
568580
adapter.setMessageRecoverer((message, cause) -> {
569581
});
@@ -580,6 +592,7 @@ public void testExclusiveRecover() {
580592
adapter.setMessageRecoverer((message, cause) -> {
581593
});
582594
adapter.setRecoveryCallback(context -> null);
595+
adapter.setBeanFactory(CONTEXT);
583596
assertThatIllegalStateException()
584597
.isThrownBy(adapter::afterPropertiesSet)
585598
.withMessageStartingWith("Only one of 'recoveryCallback' or 'messageRecoverer' may be provided, " +
@@ -609,6 +622,7 @@ public Object fromMessage(org.springframework.amqp.core.Message message) throws
609622

610623
});
611624
adapter.setBatchMode(BatchMode.EXTRACT_PAYLOADS);
625+
adapter.setBeanFactory(CONTEXT);
612626
adapter.afterPropertiesSet();
613627
MessageProperties messageProperties = new MessageProperties();
614628
messageProperties.setContentType("text/plain");
@@ -665,6 +679,7 @@ public Object fromMessage(org.springframework.amqp.core.Message message) throws
665679
}
666680

667681
});
682+
adapter.setBeanFactory(CONTEXT);
668683
adapter.afterPropertiesSet();
669684
MessageProperties messageProperties = new MessageProperties();
670685
messageProperties.setContentType("text/plain");
@@ -709,6 +724,7 @@ public void testRetryWithinOnMessageAdapterConsumerBatch() {
709724
adapter.setRetryTemplate(new RetryTemplate());
710725
QueueChannel errors = new QueueChannel();
711726
ErrorMessageSendingRecoverer recoveryCallback = new ErrorMessageSendingRecoverer(errors);
727+
adapter.setBeanFactory(CONTEXT);
712728
recoveryCallback.setErrorMessageStrategy(new AmqpMessageHeaderErrorMessageStrategy());
713729
adapter.setRecoveryCallback(recoveryCallback);
714730
adapter.afterPropertiesSet();
@@ -761,6 +777,7 @@ public void testRetryWithMessageRecovererOnMessageAdapterConsumerBatch() throws
761777
recoveredError.set(cause);
762778
recoveredLatch.countDown();
763779
});
780+
adapter.setBeanFactory(CONTEXT);
764781
adapter.afterPropertiesSet();
765782
ChannelAwareBatchMessageListener listener = (ChannelAwareBatchMessageListener) container.getMessageListener();
766783
MessageProperties messageProperties = new MessageProperties();

spring-integration-amqp/src/test/java/org/springframework/integration/amqp/outbound/OutboundEndpointTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.springframework.integration.channel.QueueChannel;
3838
import org.springframework.integration.mapping.support.JsonHeaders;
3939
import org.springframework.integration.support.MessageBuilder;
40+
import org.springframework.integration.test.context.TestApplicationContextAware;
4041
import org.springframework.messaging.MessageHeaders;
4142
import org.springframework.messaging.support.GenericMessage;
4243
import org.springframework.scheduling.TaskScheduler;
@@ -59,7 +60,7 @@
5960
*
6061
* @since 3.0
6162
*/
62-
public class OutboundEndpointTests {
63+
public class OutboundEndpointTests implements TestApplicationContextAware {
6364

6465
@Test
6566
public void testDelayExpression() {
@@ -75,6 +76,7 @@ public void testDelayExpression() {
7576
endpoint.setRoutingKey("bar");
7677
endpoint.setDelayExpressionString("42");
7778
endpoint.setBeanFactory(mock(BeanFactory.class));
79+
endpoint.setBeanFactory(CONTEXT);
7880
endpoint.afterPropertiesSet();
7981
endpoint.handleMessage(new GenericMessage<>("foo"));
8082
ArgumentCaptor<Message> captor = ArgumentCaptor.forClass(Message.class);
@@ -109,6 +111,7 @@ public void testAsyncDelayExpression() {
109111
gateway.setDelayExpressionString("42");
110112
gateway.setBeanFactory(mock(BeanFactory.class));
111113
gateway.setOutputChannel(new NullChannel());
114+
gateway.setBeanFactory(CONTEXT);
112115
gateway.afterPropertiesSet();
113116
gateway.start();
114117
ArgumentCaptor<Message> captor = ArgumentCaptor.forClass(Message.class);

spring-integration-camel/src/test/java/org/springframework/integration/camel/dsl/CamelDslTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
3636

3737
import static org.assertj.core.api.Assertions.assertThat;
38+
import static org.mockito.Mockito.mock;
3839

3940
/**
4041
* @author Artem Bilan
@@ -51,7 +52,9 @@ public class CamelDslTests {
5152

5253
@Test
5354
void sendAndReceiveCamelRoute() {
54-
String result = new MessagingTemplate().convertSendAndReceive(this.input, "apache camel", String.class);
55+
MessagingTemplate messagingTemplate = new MessagingTemplate();
56+
messagingTemplate.setBeanFactory(mock());
57+
String result = messagingTemplate.convertSendAndReceive(this.input, "apache camel", String.class);
5558
assertThat(result).isEqualTo("___APACHE CAMEL___");
5659
}
5760

spring-integration-camel/src/test/java/org/springframework/integration/camel/outbound/CamelMessageHandlerTests.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,25 @@
2626
import org.assertj.core.api.InstanceOfAssertFactories;
2727
import org.junit.jupiter.api.Test;
2828

29-
import org.springframework.beans.factory.BeanFactory;
3029
import org.springframework.expression.spel.standard.SpelExpressionParser;
3130
import org.springframework.integration.camel.support.CamelHeaderMapper;
3231
import org.springframework.integration.channel.QueueChannel;
3332
import org.springframework.integration.expression.FunctionExpression;
3433
import org.springframework.integration.support.MessageBuilder;
34+
import org.springframework.integration.test.context.TestApplicationContextAware;
3535
import org.springframework.messaging.Message;
3636
import org.springframework.messaging.MessageHandlingException;
3737
import org.springframework.messaging.MessageHeaders;
3838
import org.springframework.messaging.support.GenericMessage;
3939

4040
import static org.assertj.core.api.Assertions.assertThat;
41-
import static org.mockito.Mockito.mock;
4241

4342
/**
4443
* @author Artem Bilan
4544
*
4645
* @since 6.0
4746
*/
48-
public class CamelMessageHandlerTests extends CamelTestSupport {
47+
public class CamelMessageHandlerTests extends CamelTestSupport implements TestApplicationContextAware {
4948

5049
@Test
5150
void inOnlyPatternSyncMessageHandler() throws InterruptedException {
@@ -60,7 +59,7 @@ void inOnlyPatternSyncMessageHandler() throws InterruptedException {
6059

6160
CamelMessageHandler camelMessageHandler = new CamelMessageHandler(template());
6261
camelMessageHandler.setEndpointUri("direct:simple");
63-
camelMessageHandler.setBeanFactory(mock(BeanFactory.class));
62+
camelMessageHandler.setBeanFactory(CONTEXT);
6463
camelMessageHandler.afterPropertiesSet();
6564

6665
camelMessageHandler.handleMessage(messageUnderTest);
@@ -97,7 +96,7 @@ void inOutPatternSyncMessageHandlerWithNoRequestHeadersButReplyHeaders() throws
9796
camelMessageHandler.setEndpointUriExpression(new FunctionExpression<>(m -> "direct:simple"));
9897
camelMessageHandler.setExchangePatternExpression(spelExpressionParser.parseExpression("headers.exchangePattern"));
9998
camelMessageHandler.setHeaderMapper(headerMapper);
100-
camelMessageHandler.setBeanFactory(mock(BeanFactory.class));
99+
camelMessageHandler.setBeanFactory(CONTEXT);
101100
camelMessageHandler.afterPropertiesSet();
102101

103102
camelMessageHandler.handleMessage(messageUnderTest);
@@ -128,7 +127,7 @@ void inOnlyPatternAsyncMessageHandlerWithException() throws InterruptedException
128127

129128
CamelMessageHandler camelMessageHandler = new CamelMessageHandler(template());
130129
camelMessageHandler.setEndpointUri("direct:simple");
131-
camelMessageHandler.setBeanFactory(mock(BeanFactory.class));
130+
camelMessageHandler.setBeanFactory(CONTEXT);
132131
camelMessageHandler.setAsync(true);
133132
camelMessageHandler.afterPropertiesSet();
134133

@@ -161,7 +160,7 @@ void inOutPatternAsyncMessageHandler() throws InterruptedException {
161160
producerTemplate.setDefaultEndpointUri("direct:simple");
162161
CamelMessageHandler camelMessageHandler = new CamelMessageHandler(producerTemplate);
163162
camelMessageHandler.setExchangePattern(ExchangePattern.InOut);
164-
camelMessageHandler.setBeanFactory(mock(BeanFactory.class));
163+
camelMessageHandler.setBeanFactory(CONTEXT);
165164
camelMessageHandler.setAsync(true);
166165
camelMessageHandler.afterPropertiesSet();
167166

spring-integration-core/src/main/java/org/springframework/integration/aggregator/AbstractAggregatingMessageGroupProcessor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public abstract class AbstractAggregatingMessageGroupProcessor implements Messag
5656

5757
private boolean messageBuilderFactorySet;
5858

59+
@SuppressWarnings("NullAway.Init")
5960
private BeanFactory beanFactory;
6061

6162
@Override

spring-integration-core/src/main/java/org/springframework/integration/aggregator/AbstractCorrelatingMessageHandler.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public abstract class AbstractCorrelatingMessageHandler extends AbstractMessageP
125125

126126
private boolean releaseStrategySet;
127127

128-
@SuppressWarnings("NullAway.Init")
128+
@Nullable
129129
private MessageChannel discardChannel;
130130

131131
@Nullable
@@ -490,7 +490,8 @@ protected BiFunction<Message<?>, String, String> getGroupConditionSupplier() {
490490
}
491491

492492
@Override
493-
public MessageChannel getDiscardChannel() {
493+
@Nullable
494+
public MessageChannel getDiscardChannel() {
494495
String channelName = this.discardChannelName;
495496
if (channelName == null && this.discardChannel == null) {
496497
channelName = IntegrationContextUtils.NULL_CHANNEL_BEAN_NAME;

spring-integration-core/src/main/java/org/springframework/integration/aggregator/DelegatingMessageGroupProcessor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public class DelegatingMessageGroupProcessor implements MessageGroupProcessor, B
6161

6262
private volatile boolean messageBuilderFactorySet;
6363

64+
@SuppressWarnings("NullAway.Init")
6465
private BeanFactory beanFactory;
6566

6667
public DelegatingMessageGroupProcessor(MessageGroupProcessor delegate,

spring-integration-core/src/main/java/org/springframework/integration/aggregator/ExpressionEvaluatingMessageListProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public void setExpectedType(Class<?> expectedType) {
106106
@Override
107107
public Object process(Collection<? extends Message<?>> messages) {
108108
Object object = this.evaluateExpression(this.expression, messages, this.expectedType);
109-
Assert.state(object != null, "The evaluation of the expression returned a null. Null result is not expected." + this.expression);
109+
Assert.state(object != null, "The evaluation of the expression returned a null. Null result is not expected:" + this.expression);
110110
return object;
111111
}
112112

spring-integration-core/src/main/java/org/springframework/integration/aggregator/FluxAggregatorMessageHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ private Flux<Flux<Message<?>>> applyWindowOptions(Flux<Message<?>> groupFlux) {
115115
return groupFlux
116116
.switchOnFirst((signal, group) -> {
117117
if (signal.hasValue()) {
118-
Assert.notNull(this.windowSizeFunction, "'windowSizeFunction' must not be null");
119118
Integer maxSize = this.windowSizeFunction.apply(Objects.requireNonNull(signal.get()));
120119
if (maxSize != null) {
121120
if (this.windowTimespan != null) {
@@ -291,4 +290,5 @@ private Mono<Message<?>> messageForWindowFlux(Flux<Message<?>> messageFlux) {
291290
private static @Nullable Integer sequenceSizeHeader(Message<?> message) {
292291
return message.getHeaders().get(IntegrationMessageHeaderAccessor.SEQUENCE_SIZE, Integer.class);
293292
}
293+
294294
}

spring-integration-core/src/main/java/org/springframework/integration/context/IntegrationContextUtils.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public static MetadataStore getMetadataStore(BeanFactory beanFactory) {
133133
*/
134134
public static MessageChannel getErrorChannel(BeanFactory beanFactory) {
135135
MessageChannel channel = getBeanOfType(beanFactory, ERROR_CHANNEL_BEAN_NAME, MessageChannel.class);
136-
Assert.state(channel != null, "Error Channel was not found");
136+
Assert.state(channel != null, "No such bean '" + ERROR_CHANNEL_BEAN_NAME + "'");
137137
return channel;
138138
}
139139

@@ -163,9 +163,10 @@ public static TaskScheduler getRequiredTaskScheduler(BeanFactory beanFactory) {
163163
* @return the instance of {@link StandardEvaluationContext} bean whose name is
164164
* {@value #INTEGRATION_EVALUATION_CONTEXT_BEAN_NAME}.
165165
*/
166-
@Nullable
167166
public static StandardEvaluationContext getEvaluationContext(BeanFactory beanFactory) {
168-
return getBeanOfType(beanFactory, INTEGRATION_EVALUATION_CONTEXT_BEAN_NAME, StandardEvaluationContext.class);
167+
StandardEvaluationContext standardEvaluationContext = getBeanOfType(beanFactory, INTEGRATION_EVALUATION_CONTEXT_BEAN_NAME, StandardEvaluationContext.class);
168+
Assert.state(standardEvaluationContext != null, "No such bean '" + INTEGRATION_EVALUATION_CONTEXT_BEAN_NAME + "'");
169+
return standardEvaluationContext;
169170
}
170171

171172
/**
@@ -174,10 +175,12 @@ public static StandardEvaluationContext getEvaluationContext(BeanFactory beanFac
174175
* {@value #INTEGRATION_SIMPLE_EVALUATION_CONTEXT_BEAN_NAME}.
175176
* @since 4.3.15
176177
*/
177-
@Nullable
178178
public static SimpleEvaluationContext getSimpleEvaluationContext(BeanFactory beanFactory) {
179-
return getBeanOfType(beanFactory, INTEGRATION_SIMPLE_EVALUATION_CONTEXT_BEAN_NAME,
179+
SimpleEvaluationContext simpleEvaluationContext = getBeanOfType(beanFactory, INTEGRATION_SIMPLE_EVALUATION_CONTEXT_BEAN_NAME,
180180
SimpleEvaluationContext.class);
181+
Assert.state(simpleEvaluationContext != null, "No such bean '" + INTEGRATION_SIMPLE_EVALUATION_CONTEXT_BEAN_NAME + "'");
182+
183+
return simpleEvaluationContext;
181184
}
182185

183186
@Nullable
@@ -200,11 +203,8 @@ private static <T> T getBeanOfType(BeanFactory beanFactory, String beanName, Cla
200203
* provided {@code #beanFactory} or provided {@code #beanFactory} is null.
201204
*/
202205
public static IntegrationProperties getIntegrationProperties(BeanFactory beanFactory) {
203-
IntegrationProperties integrationProperties = null;
204-
if (beanFactory != null) {
205-
integrationProperties =
206+
IntegrationProperties integrationProperties =
206207
getBeanOfType(beanFactory, INTEGRATION_GLOBAL_PROPERTIES_BEAN_NAME, IntegrationProperties.class);
207-
}
208208
if (integrationProperties == null) {
209209
integrationProperties = IntegrationProperties.DEFAULT_INSTANCE;
210210
}

spring-integration-core/src/main/java/org/springframework/integration/context/IntegrationProperties.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ public final class IntegrationProperties {
141141

142142
private long endpointsDefaultTimeout = IntegrationContextUtils.DEFAULT_TIMEOUT;
143143

144+
@Nullable
144145
private volatile Properties properties;
145146

146147
static {

0 commit comments

Comments
 (0)