GH-10046: Propagate error strategy in the JmsEndpoint
Fixes: #10046
Issue link: https://github.com/spring-projects/spring-integration/issues/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 da1ec071c5)
This commit is contained in:
committed by
Spring Builds
parent
c60dc9ec7b
commit
31544a3144
@@ -164,7 +164,7 @@ public abstract class MessageProducerSupport extends AbstractEndpoint
|
||||
* @param errorMessageStrategy the {@link ErrorMessageStrategy}.
|
||||
* @since 4.3.10
|
||||
*/
|
||||
public final void setErrorMessageStrategy(ErrorMessageStrategy errorMessageStrategy) {
|
||||
public void setErrorMessageStrategy(ErrorMessageStrategy errorMessageStrategy) {
|
||||
Assert.notNull(errorMessageStrategy, "'errorMessageStrategy' cannot be null");
|
||||
this.errorMessageStrategy = errorMessageStrategy;
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ import org.springframework.integration.expression.ExpressionUtils;
|
||||
import org.springframework.integration.gateway.MessagingGatewaySupport;
|
||||
import org.springframework.integration.jms.support.JmsMessageHeaderErrorMessageStrategy;
|
||||
import org.springframework.integration.support.DefaultMessageBuilderFactory;
|
||||
import org.springframework.integration.support.ErrorMessageStrategy;
|
||||
import org.springframework.integration.support.ErrorMessageUtils;
|
||||
import org.springframework.integration.support.MessageBuilderFactory;
|
||||
import org.springframework.integration.support.management.TrackableComponent;
|
||||
@@ -337,6 +338,10 @@ public class ChannelPublishingJmsMessageListener
|
||||
this.extractReplyPayload = extractReplyPayload;
|
||||
}
|
||||
|
||||
public void setErrorMessageStrategy(ErrorMessageStrategy errorMessageStrategy) {
|
||||
this.gatewayDelegate.setErrorMessageStrategy(errorMessageStrategy);
|
||||
}
|
||||
|
||||
public void setMetricsCaptor(MetricsCaptor captor) {
|
||||
this.gatewayDelegate.registerMetricsCaptor(captor);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.integration.context.OrderlyShutdownCapable;
|
||||
import org.springframework.integration.endpoint.MessageProducerSupport;
|
||||
import org.springframework.integration.jms.util.JmsAdapterUtils;
|
||||
import org.springframework.integration.support.ErrorMessageStrategy;
|
||||
import org.springframework.integration.support.management.metrics.MetricsCaptor;
|
||||
import org.springframework.integration.support.management.observation.MessageReceiverObservationConvention;
|
||||
import org.springframework.jms.listener.AbstractMessageListenerContainer;
|
||||
@@ -137,6 +138,12 @@ public class JmsMessageDrivenEndpoint extends MessageProducerSupport implements
|
||||
this.listener.setShouldTrack(shouldTrack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setErrorMessageStrategy(ErrorMessageStrategy errorMessageStrategy) {
|
||||
super.setErrorMessageStrategy(errorMessageStrategy);
|
||||
this.listener.setErrorMessageStrategy(errorMessageStrategy);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set to {@code false} to prevent listener container shutdown when the endpoint is stopped.
|
||||
* Then, if so configured, any cached consumer(s) in the container will remain.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2018-2024 the original author or authors.
|
||||
* Copyright 2018-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.
|
||||
@@ -27,6 +27,7 @@ import org.springframework.integration.config.EnableIntegration;
|
||||
import org.springframework.integration.jms.ActiveMQMultiContextTests;
|
||||
import org.springframework.integration.jms.ChannelPublishingJmsMessageListener;
|
||||
import org.springframework.integration.jms.JmsMessageDrivenEndpoint;
|
||||
import org.springframework.integration.support.ErrorMessageStrategy;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.jms.core.JmsTemplate;
|
||||
import org.springframework.jms.listener.AbstractMessageListenerContainer;
|
||||
@@ -61,7 +62,9 @@ public class JmsMessageDrivenEndpointTests extends ActiveMQMultiContextTests {
|
||||
|
||||
@Test
|
||||
public void testStopStart(@Autowired JmsTemplate template,
|
||||
@Autowired JmsMessageDrivenEndpoint endpoint, @Autowired QueueChannel out) {
|
||||
@Autowired JmsMessageDrivenEndpoint endpoint, @Autowired QueueChannel out,
|
||||
@Autowired ErrorMessageStrategy mockErrorMessageStrategy) {
|
||||
|
||||
template.convertAndSend("stop.start", "foo");
|
||||
assertThat(out.receive(10_000).getPayload()).isEqualTo("foo");
|
||||
endpoint.stop();
|
||||
@@ -69,6 +72,9 @@ public class JmsMessageDrivenEndpointTests extends ActiveMQMultiContextTests {
|
||||
endpoint.start();
|
||||
template.convertAndSend("stop.start", "bar");
|
||||
assertThat(out.receive(10_000).getPayload()).isEqualTo("bar");
|
||||
|
||||
assertThat(TestUtils.getPropertyValue(endpoint, "listener.gatewayDelegate.errorMessageStrategy"))
|
||||
.isSameAs(mockErrorMessageStrategy);
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@@ -81,8 +87,15 @@ public class JmsMessageDrivenEndpointTests extends ActiveMQMultiContextTests {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public JmsMessageDrivenEndpoint inbound() {
|
||||
return new JmsMessageDrivenEndpoint(container(), listener());
|
||||
ErrorMessageStrategy mockErrorMessageStrategy() {
|
||||
return mock();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public JmsMessageDrivenEndpoint inbound(ErrorMessageStrategy mockErrorMessageStrategy) {
|
||||
JmsMessageDrivenEndpoint jmsMessageDrivenEndpoint = new JmsMessageDrivenEndpoint(container(), listener());
|
||||
jmsMessageDrivenEndpoint.setErrorMessageStrategy(mockErrorMessageStrategy);
|
||||
return jmsMessageDrivenEndpoint;
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
||||
Reference in New Issue
Block a user