From 828e6b17e5054a629a6762bd28d3cf5eeba713af Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Wed, 11 Dec 2019 16:22:09 -0500 Subject: [PATCH] Apply aRPPs for replies with a listener container - `afterReceivePostProcessors` were not applied when using a reply container. --- .gitignore | 1 + .../amqp/rabbit/core/RabbitTemplate.java | 5 +++++ .../EnableRabbitIntegrationTests.java | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/.gitignore b/.gitignore index 598a88e4..362f5385 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ erl_crash.dump nohup.out src/ant/.ant-targets-upload-dist.xml target +.sts4-cache/ diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/core/RabbitTemplate.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/core/RabbitTemplate.java index 1b754610..66e29ea2 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/core/RabbitTemplate.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/core/RabbitTemplate.java @@ -1936,6 +1936,11 @@ public class RabbitTemplate extends RabbitAccessor // NOSONAR type line count try { reply = exchangeMessages(exchange, routingKey, message, correlationData, channel, pendingReply, messageTag); + if (reply != null && this.afterReceivePostProcessors != null) { + for (MessagePostProcessor processor : this.afterReceivePostProcessors) { + reply = processor.postProcessMessage(reply); + } + } } finally { this.replyHolder.remove(messageTag); diff --git a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java index d53d8c81..b210a66d 100644 --- a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java +++ b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java @@ -409,6 +409,25 @@ public class EnableRabbitIntegrationTests { assertEquals(reply.getMessageProperties().getHeaders().get("replyMPPApplied"), Boolean.TRUE); } + @Test + public void endpointWithHeaderReplyMPP() { + MessageProperties properties = new MessageProperties(); + properties.setHeader("prefix", "prefix-"); + Message request = MessageTestUtils.createTextMessage("foo", properties); + AtomicReference replyRef = new AtomicReference<>(); + rabbitTemplate.setAfterReceivePostProcessors(msg -> { + replyRef.set(msg); + return msg; + }); + rabbitTemplate.convertSendAndReceive("", "test.header", "", msg -> { + return request; + }); + Message reply = replyRef.get(); + assertNotNull(reply); + assertEquals("prefix-FOO", MessageTestUtils.extractText(reply)); + assertEquals(reply.getMessageProperties().getHeaders().get("replyMPPApplied"), Boolean.TRUE); + } + @Test public void endpointWithMessage() { MessageProperties properties = new MessageProperties();