Skip to content

Commit b1fe555

Browse files
artembilanspring-builds
authored andcommitted
GH-10046: Propagate error strategy in the JmsEndpoint
Fixes: #10046 Issue link: #10046 The `JmsMessageDrivenEndpoint` does not propagate an `ErrorMessageStrategy` down to the `ChannelPublishingJmsMessageListener.GatewayDelegate` * Expose `JmsMessageDrivenEndpoint.setErrorMessageStrategy()` and call respective `this.listener.setErrorMessageStrategy()` (cherry picked from commit da1ec07)
1 parent ad376f2 commit b1fe555

File tree

4 files changed

+30
-5
lines changed

4 files changed

+30
-5
lines changed

spring-integration-core/src/main/java/org/springframework/integration/endpoint/MessageProducerSupport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ public void setShouldTrack(boolean shouldTrack) {
164164
* @param errorMessageStrategy the {@link ErrorMessageStrategy}.
165165
* @since 4.3.10
166166
*/
167-
public final void setErrorMessageStrategy(ErrorMessageStrategy errorMessageStrategy) {
167+
public void setErrorMessageStrategy(ErrorMessageStrategy errorMessageStrategy) {
168168
Assert.notNull(errorMessageStrategy, "'errorMessageStrategy' cannot be null");
169169
this.errorMessageStrategy = errorMessageStrategy;
170170
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.springframework.integration.gateway.MessagingGatewaySupport;
4343
import org.springframework.integration.jms.support.JmsMessageHeaderErrorMessageStrategy;
4444
import org.springframework.integration.support.DefaultMessageBuilderFactory;
45+
import org.springframework.integration.support.ErrorMessageStrategy;
4546
import org.springframework.integration.support.ErrorMessageUtils;
4647
import org.springframework.integration.support.MessageBuilderFactory;
4748
import org.springframework.integration.support.management.TrackableComponent;
@@ -338,6 +339,10 @@ public void setExtractReplyPayload(boolean extractReplyPayload) {
338339
this.extractReplyPayload = extractReplyPayload;
339340
}
340341

342+
public void setErrorMessageStrategy(ErrorMessageStrategy errorMessageStrategy) {
343+
this.gatewayDelegate.setErrorMessageStrategy(errorMessageStrategy);
344+
}
345+
341346
public void setMetricsCaptor(MetricsCaptor captor) {
342347
this.gatewayDelegate.registerMetricsCaptor(captor);
343348
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.springframework.integration.context.OrderlyShutdownCapable;
2424
import org.springframework.integration.endpoint.MessageProducerSupport;
2525
import org.springframework.integration.jms.util.JmsAdapterUtils;
26+
import org.springframework.integration.support.ErrorMessageStrategy;
2627
import org.springframework.integration.support.management.metrics.MetricsCaptor;
2728
import org.springframework.integration.support.management.observation.MessageReceiverObservationConvention;
2829
import org.springframework.jms.listener.AbstractMessageListenerContainer;
@@ -137,6 +138,12 @@ public void setShouldTrack(boolean shouldTrack) {
137138
this.listener.setShouldTrack(shouldTrack);
138139
}
139140

141+
@Override
142+
public void setErrorMessageStrategy(ErrorMessageStrategy errorMessageStrategy) {
143+
super.setErrorMessageStrategy(errorMessageStrategy);
144+
this.listener.setErrorMessageStrategy(errorMessageStrategy);
145+
}
146+
140147
/**
141148
* Set to {@code false} to prevent listener container shutdown when the endpoint is stopped.
142149
* Then, if so configured, any cached consumer(s) in the container will remain.

spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointTests.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2018-2024 the original author or authors.
2+
* Copyright 2018-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.
@@ -27,6 +27,7 @@
2727
import org.springframework.integration.jms.ActiveMQMultiContextTests;
2828
import org.springframework.integration.jms.ChannelPublishingJmsMessageListener;
2929
import org.springframework.integration.jms.JmsMessageDrivenEndpoint;
30+
import org.springframework.integration.support.ErrorMessageStrategy;
3031
import org.springframework.integration.test.util.TestUtils;
3132
import org.springframework.jms.core.JmsTemplate;
3233
import org.springframework.jms.listener.AbstractMessageListenerContainer;
@@ -61,14 +62,19 @@ public void testListenerIsAlreadyProvided() {
6162

6263
@Test
6364
public void testStopStart(@Autowired JmsTemplate template,
64-
@Autowired JmsMessageDrivenEndpoint endpoint, @Autowired QueueChannel out) {
65+
@Autowired JmsMessageDrivenEndpoint endpoint, @Autowired QueueChannel out,
66+
@Autowired ErrorMessageStrategy mockErrorMessageStrategy) {
67+
6568
template.convertAndSend("stop.start", "foo");
6669
assertThat(out.receive(10_000).getPayload()).isEqualTo("foo");
6770
endpoint.stop();
6871
assertThat(TestUtils.getPropertyValue(endpoint, "listenerContainer.sharedConnection")).isNull();
6972
endpoint.start();
7073
template.convertAndSend("stop.start", "bar");
7174
assertThat(out.receive(10_000).getPayload()).isEqualTo("bar");
75+
76+
assertThat(TestUtils.getPropertyValue(endpoint, "listener.gatewayDelegate.errorMessageStrategy"))
77+
.isSameAs(mockErrorMessageStrategy);
7278
}
7379

7480
@Configuration
@@ -81,8 +87,15 @@ public JmsTemplate template() {
8187
}
8288

8389
@Bean
84-
public JmsMessageDrivenEndpoint inbound() {
85-
return new JmsMessageDrivenEndpoint(container(), listener());
90+
ErrorMessageStrategy mockErrorMessageStrategy() {
91+
return mock();
92+
}
93+
94+
@Bean
95+
public JmsMessageDrivenEndpoint inbound(ErrorMessageStrategy mockErrorMessageStrategy) {
96+
JmsMessageDrivenEndpoint jmsMessageDrivenEndpoint = new JmsMessageDrivenEndpoint(container(), listener());
97+
jmsMessageDrivenEndpoint.setErrorMessageStrategy(mockErrorMessageStrategy);
98+
return jmsMessageDrivenEndpoint;
8699
}
87100

88101
@Bean

0 commit comments

Comments
 (0)