[KARAF-4647] Make sure we send maps as object not as String
diff --git a/appender/jms/src/main/java/org/apache/karaf/decanter/appender/jms/JmsAppender.java b/appender/jms/src/main/java/org/apache/karaf/decanter/appender/jms/JmsAppender.java
index 021c491..38d9bb4 100644
--- a/appender/jms/src/main/java/org/apache/karaf/decanter/appender/jms/JmsAppender.java
+++ b/appender/jms/src/main/java/org/apache/karaf/decanter/appender/jms/JmsAppender.java
@@ -17,6 +17,7 @@
package org.apache.karaf.decanter.appender.jms;
import java.util.Dictionary;
+import java.util.Map;
import javax.jms.*;
@@ -94,18 +95,22 @@
if (value == null) {
return;
}
- if (value instanceof String)
+ if (value instanceof String) {
message.setString(name, (String) value);
- else if (value instanceof Boolean)
+ } else if (value instanceof Boolean) {
message.setBoolean(name, (Boolean) value);
- else if (value instanceof Double)
+ } else if (value instanceof Double) {
message.setDouble(name, (Double) value);
- else if (value instanceof Integer)
+ } else if (value instanceof Integer) {
message.setInt(name, (Integer) value);
- else if (value instanceof Long)
+ } else if (value instanceof Long) {
message.setLong(name, (Long) value);
- else message.setString(name, value.toString());
- // we can setObject with List, Map, but they have to contain only primitives
+ } else if (value instanceof Map) {
+ // Must only contain primitives
+ message.setObject(name, value);
+ } else {
+ message.setString(name, value.toString());
+ }
}
private Destination createDestination(Session session) throws JMSException {
diff --git a/appender/jms/src/test/java/org/apache/karaf/decanter/appender/jms/JmsAppenderTest.java b/appender/jms/src/test/java/org/apache/karaf/decanter/appender/jms/JmsAppenderTest.java
index dfb3a64..d1a1c9e 100644
--- a/appender/jms/src/test/java/org/apache/karaf/decanter/appender/jms/JmsAppenderTest.java
+++ b/appender/jms/src/test/java/org/apache/karaf/decanter/appender/jms/JmsAppenderTest.java
@@ -56,6 +56,7 @@
props.put("boolean", true);
props.put("integer", 1);
props.put("testnull", null);
+ props.put("map", new HashMap<String, String>());
appender.handleEvent(new Event("decanter/collect", props));
MapMessage message = (MapMessage)consumer.receive(1000);
@@ -67,5 +68,7 @@
Assert.assertEquals("test", message.getObject("string"));
Assert.assertEquals(true, message.getObject("boolean"));
Assert.assertEquals(1, message.getObject("integer"));
+ Object map = message.getObject("map");
+ Assert.assertTrue(map instanceof Map);
}
}