Skip to content

Commit 00bd3dc

Browse files
garyrussellartembilan
authored andcommitted
AMQP-818: Fix Class-level listener properties
JIRA: https://jira.spring.io/browse/AMQP-818 `errorHandler` and `returnExceptions` properties were not injected into class-level listeners. **cherry-pick to 2.0.x**
1 parent 0e07457 commit 00bd3dc

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/annotation/RabbitListenerAnnotationBeanPostProcessor.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,6 @@ private void processMultiMethodListeners(RabbitListener[] classLevelListeners, M
356356
for (RabbitListener classLevelListener : classLevelListeners) {
357357
MultiMethodRabbitListenerEndpoint endpoint =
358358
new MultiMethodRabbitListenerEndpoint(checkedMethods, defaultMethod, bean);
359-
endpoint.setBeanFactory(this.beanFactory);
360359
processListener(endpoint, classLevelListener, bean, bean.getClass(), beanName);
361360
}
362361
}
@@ -365,12 +364,6 @@ protected void processAmqpListener(RabbitListener rabbitListener, Method method,
365364
Method methodToUse = checkProxy(method, bean);
366365
MethodRabbitListenerEndpoint endpoint = new MethodRabbitListenerEndpoint();
367366
endpoint.setMethod(methodToUse);
368-
endpoint.setBeanFactory(this.beanFactory);
369-
endpoint.setReturnExceptions(resolveExpressionAsBoolean(rabbitListener.returnExceptions()));
370-
String errorHandlerBeanName = resolveExpressionAsString(rabbitListener.errorHandler(), "errorHandler");
371-
if (StringUtils.hasText(errorHandlerBeanName)) {
372-
endpoint.setErrorHandler(this.beanFactory.getBean(errorHandlerBeanName, RabbitListenerErrorHandler.class));
373-
}
374367
processListener(endpoint, rabbitListener, bean, methodToUse, beanName);
375368
}
376369

@@ -412,6 +405,12 @@ protected void processListener(MethodRabbitListenerEndpoint endpoint, RabbitList
412405
endpoint.setId(getEndpointId(rabbitListener));
413406
endpoint.setQueueNames(resolveQueues(rabbitListener));
414407
endpoint.setConcurrency(resolveExpressionAsStringOrInteger(rabbitListener.concurrency(), "concurrency"));
408+
endpoint.setBeanFactory(this.beanFactory);
409+
endpoint.setReturnExceptions(resolveExpressionAsBoolean(rabbitListener.returnExceptions()));
410+
String errorHandlerBeanName = resolveExpressionAsString(rabbitListener.errorHandler(), "errorHandler");
411+
if (StringUtils.hasText(errorHandlerBeanName)) {
412+
endpoint.setErrorHandler(this.beanFactory.getBean(errorHandlerBeanName, RabbitListenerErrorHandler.class));
413+
}
415414
String group = rabbitListener.group();
416415
if (StringUtils.hasText(group)) {
417416
Object resolvedGroup = resolveExpression(group);

spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static org.hamcrest.Matchers.containsString;
2222
import static org.hamcrest.Matchers.equalTo;
2323
import static org.hamcrest.Matchers.instanceOf;
24+
import static org.hamcrest.Matchers.notNullValue;
2425
import static org.hamcrest.Matchers.startsWith;
2526
import static org.junit.Assert.assertEquals;
2627
import static org.junit.Assert.assertFalse;
@@ -359,8 +360,10 @@ public void multiListenerJson() {
359360
this.jsonRabbitTemplate.convertAndSend(exchange, routingKey, bar);
360361
this.jsonRabbitTemplate.setReceiveTimeout(10000);
361362
assertEquals("BAR: barMultiListenerJsonBean", this.jsonRabbitTemplate.receiveAndConvert("sendTo.replies.spel"));
362-
assertThat(TestUtils.getPropertyValue(this.registry.getListenerContainer("multi"), "concurrentConsumers"),
363-
equalTo(1));
363+
MessageListenerContainer container = this.registry.getListenerContainer("multi");
364+
assertThat(TestUtils.getPropertyValue(container, "concurrentConsumers"), equalTo(1));
365+
assertThat(TestUtils.getPropertyValue(container, "messageListener.errorHandler"), notNullValue());
366+
assertTrue(TestUtils.getPropertyValue(container, "messageListener.returnExceptions", Boolean.class));
364367
}
365368

366369
@Test
@@ -1362,7 +1365,8 @@ public String defaultHandler(@Payload Object payload) {
13621365
@RabbitListener(id = "multi", bindings = @QueueBinding
13631366
(value = @Queue,
13641367
exchange = @Exchange(value = "multi.json.exch", autoDelete = "true"),
1365-
key = "multi.json.rk"), containerFactory = "simpleJsonListenerContainerFactory")
1368+
key = "multi.json.rk"), containerFactory = "simpleJsonListenerContainerFactory",
1369+
errorHandler = "alwaysBARHandler", returnExceptions = "true")
13661370
static class MultiListenerJsonBean {
13671371

13681372
@RabbitHandler

0 commit comments

Comments
 (0)