From c3097410032b88d111dfdaa7bdf825a0096ebe20 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Thu, 30 Aug 2012 12:03:43 -0400 Subject: [PATCH] AMQP-268 Fix Appender MDC Properties MDC Properties were being stored under key Entry.toString() instead of Entry.getKey().toString(). --- .../amqp/rabbit/log4j/AmqpAppender.java | 8 ++++++-- .../log4j/AmqpAppenderIntegrationTests.java | 17 +++++++++++++---- .../amqp/rabbit/log4j/TestListener.java | 16 ++++++++++++---- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/log4j/AmqpAppender.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/log4j/AmqpAppender.java index d60e0b8a..3218349d 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/log4j/AmqpAppender.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/log4j/AmqpAppender.java @@ -15,6 +15,8 @@ package org.springframework.amqp.rabbit.log4j; import java.util.Calendar; import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; import java.util.Timer; import java.util.TimerTask; import java.util.UUID; @@ -491,8 +493,10 @@ public class AmqpAppender extends AppenderSkeleton { // Copy properties in from MDC @SuppressWarnings("rawtypes") Map props = event.getProperties(); - for (Object key : event.getProperties().entrySet()) { - amqpProps.setHeader(key.toString(), props.get(key)); + @SuppressWarnings("unchecked") + Set> entrySet = props.entrySet(); + for (Entry entry : entrySet) { + amqpProps.setHeader(entry.getKey().toString(), entry.getValue()); } LocationInfo locInfo = logEvent.getLocationInformation(); if (!"?".equals(locInfo.getClassName())) { diff --git a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/log4j/AmqpAppenderIntegrationTests.java b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/log4j/AmqpAppenderIntegrationTests.java index 35ee3b13..b910aa55 100644 --- a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/log4j/AmqpAppenderIntegrationTests.java +++ b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/log4j/AmqpAppenderIntegrationTests.java @@ -13,7 +13,9 @@ package org.springframework.amqp.rabbit.log4j; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.util.concurrent.TimeUnit; @@ -24,6 +26,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.amqp.rabbit.test.BrokerRunning; import org.springframework.beans.factory.annotation.Autowired; @@ -75,7 +78,7 @@ public class AmqpAppenderIntegrationTests { log.warn("This is a WARN message"); log.error("This is an ERROR message", new RuntimeException("Test exception")); - testListener.getLatch().await(5, TimeUnit.SECONDS); + assertTrue(testListener.getLatch().await(5, TimeUnit.SECONDS)); assertNotNull(testListener.getId()); } @@ -85,14 +88,20 @@ public class AmqpAppenderIntegrationTests { listenerContainer.setMessageListener(testListener); listenerContainer.start(); - MDC.put("someproperty", "property.value"); + String propertyName = "someproperty"; + String propertyValue = "property.value"; + MDC.put(propertyName, propertyValue); log.debug("This is a DEBUG message with properties"); log.info("This is an INFO message with properties"); log.warn("This is a WARN message with properties"); log.error("This is an ERROR message with properties", new RuntimeException("Test exception")); - MDC.remove("someproperty"); + MDC.remove(propertyName); - testListener.getLatch().await(5, TimeUnit.SECONDS); + assertTrue(testListener.getLatch().await(5, TimeUnit.SECONDS)); + MessageProperties messageProperties = testListener.getMessageProperties(); + assertNotNull(messageProperties); + assertNotNull(messageProperties.getHeaders().get(propertyName)); + assertEquals(propertyValue, messageProperties.getHeaders().get(propertyName)); } } diff --git a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/log4j/TestListener.java b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/log4j/TestListener.java index a4087554..d4effb60 100644 --- a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/log4j/TestListener.java +++ b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/log4j/TestListener.java @@ -20,6 +20,7 @@ import java.util.concurrent.CountDownLatch; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageListener; +import org.springframework.amqp.core.MessageProperties; /** * @author Jon Brisbin @@ -29,7 +30,7 @@ public class TestListener implements MessageListener { private CountDownLatch latch; - private Object id; + private MessageProperties messageProperties; public TestListener(int count) { latch = new CountDownLatch(count); @@ -40,13 +41,20 @@ public class TestListener implements MessageListener { } public Object getId() { - return id; -} + if (this.messageProperties == null) { + throw new IllegalStateException("No MessageProperties received"); + } + return this.messageProperties.getMessageId(); + } + + public MessageProperties getMessageProperties() { + return this.messageProperties; + } public void onMessage(Message message) { System.out.println("MESSAGE: " + message); System.out.println("BODY: " + new String(message.getBody())); - this.id = message.getMessageProperties().getMessageId(); + this.messageProperties = message.getMessageProperties(); latch.countDown(); }