diff --git a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/MessageProducerSupport.java b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/MessageProducerSupport.java index b2022b552f..81ff34875e 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/MessageProducerSupport.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/MessageProducerSupport.java @@ -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; } diff --git a/spring-integration-jms/src/main/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListener.java b/spring-integration-jms/src/main/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListener.java index 3ca51ce9f8..831e3704f6 100644 --- a/spring-integration-jms/src/main/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListener.java +++ b/spring-integration-jms/src/main/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListener.java @@ -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); } diff --git a/spring-integration-jms/src/main/java/org/springframework/integration/jms/JmsMessageDrivenEndpoint.java b/spring-integration-jms/src/main/java/org/springframework/integration/jms/JmsMessageDrivenEndpoint.java index 845a5ffae3..ffd126384c 100644 --- a/spring-integration-jms/src/main/java/org/springframework/integration/jms/JmsMessageDrivenEndpoint.java +++ b/spring-integration-jms/src/main/java/org/springframework/integration/jms/JmsMessageDrivenEndpoint.java @@ -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. diff --git a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointTests.java b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointTests.java index ce9435eb9a..8cba9eed39 100644 --- a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointTests.java +++ b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointTests.java @@ -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