summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajith Muditha Attapattu <rajith@apache.org>2010-04-09 15:37:06 +0000
committerRajith Muditha Attapattu <rajith@apache.org>2010-04-09 15:37:06 +0000
commit562660196b4d33ed52fe7788592dc757c527719e (patch)
tree3884e0560ae85d453106adcfd7e129dc6008c4ac
parentf328f8dfb20911b952f0c5551cc37c0b8d42576d (diff)
downloadqpid-python-562660196b4d33ed52fe7788592dc757c527719e.tar.gz
This is a fix for QPID-2493
Added test cases as well. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@932467 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessage.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java2
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessageTest.java112
3 files changed, 134 insertions, 1 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessage.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessage.java
index f66387e734..6e22292ee0 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessage.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessage.java
@@ -21,9 +21,11 @@ package org.apache.qpid.client.message;
*/
+import java.util.List;
import java.util.Map;
import javax.jms.JMSException;
+import javax.jms.MessageFormatException;
import org.apache.mina.common.ByteBuffer;
import org.apache.qpid.AMQException;
@@ -54,6 +56,25 @@ public class AMQPEncodedMapMessage extends JMSMapMessage
{
return MIME_TYPE;
}
+
+ @ Override
+ public void setObject(String propName, Object value) throws JMSException
+ {
+ checkWritable();
+ checkPropertyName(propName);
+ if ((value instanceof Boolean) || (value instanceof Byte) || (value instanceof Short) || (value instanceof Integer)
+ || (value instanceof Long) || (value instanceof Character) || (value instanceof Float)
+ || (value instanceof Double) || (value instanceof String) || (value instanceof byte[])
+ || (value instanceof List) || (value instanceof Map) || (value == null))
+ {
+ _map.put(propName, value);
+ }
+ else
+ {
+ throw new MessageFormatException("Cannot set property " + propName + " to value " + value + "of type "
+ + value.getClass().getName() + ".");
+ }
+ }
// The super clas methods resets the buffer
@ Override
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java
index 73f3afab03..306ffeeadf 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java
@@ -445,7 +445,7 @@ public class JMSMapMessage extends AbstractBytesTypedMessage implements javax.jm
}
}
- private void checkPropertyName(String propName)
+ protected void checkPropertyName(String propName)
{
if ((propName == null) || propName.equals(""))
{
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessageTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessageTest.java
index 96ce744075..5886ffc9f8 100644
--- a/qpid/java/systests/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessageTest.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessageTest.java
@@ -21,8 +21,10 @@ package org.apache.qpid.client.message;
*/
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.jms.Connection;
@@ -139,6 +141,116 @@ public class AMQPEncodedMapMessageTest extends QpidTestCase
assertEquals("Hello",m.getString("String"));
}
+
+ public void testMessageWithListEntries() throws JMSException
+ {
+ MapMessage m = _session.createMapMessage();
+
+ List<String> myList = getList();
+
+ m.setObject("List", myList);
+ _producer.send(m);
+
+ AMQPEncodedMapMessage msg = (AMQPEncodedMapMessage)_consumer.receive(RECEIVE_TIMEOUT);
+ assertNotNull("Message was not received on time",msg);
+ assertEquals("Message content-type is incorrect",
+ AMQPEncodedMapMessage.MIME_TYPE,
+ ((AbstractJMSMessage)msg).getContentType());
+
+ List<String> list = (List<String>)msg.getObject("List");
+ assertNotNull("List not received",list);
+ int i = 1;
+ for (String str: list)
+ {
+ assertEquals("String" + i,str);
+ i++;
+ }
+ }
+
+ public void testMessageWithMapEntries() throws JMSException
+ {
+ MapMessage m = _session.createMapMessage();
+
+ Map<String,String> myMap = getMap();
+
+ m.setObject("Map", myMap);
+ _producer.send(m);
+
+ AMQPEncodedMapMessage msg = (AMQPEncodedMapMessage)_consumer.receive(RECEIVE_TIMEOUT);
+ assertNotNull("Message was not received on time",msg);
+ assertEquals("Message content-type is incorrect",
+ AMQPEncodedMapMessage.MIME_TYPE,
+ ((AbstractJMSMessage)msg).getContentType());
+
+ Map<String,String> map = (Map<String,String>)msg.getObject("Map");
+ assertNotNull("Map not received",map);
+ int i = 1;
+ for (String str: map.keySet())
+ {
+ assertEquals("String" + i,map.get(str));
+ i++;
+ }
+ }
+
+ public void testMessageWithNestedListsAndMaps() throws JMSException
+ {
+ MapMessage m = _session.createMapMessage();
+
+ Map<String,Object> myMap = new HashMap<String,Object>();
+ myMap.put("map", getMap());
+ myMap.put("list", getList());
+
+ m.setObject("Map", myMap);
+ _producer.send(m);
+
+ AMQPEncodedMapMessage msg = (AMQPEncodedMapMessage)_consumer.receive(RECEIVE_TIMEOUT);
+ assertNotNull("Message was not received on time",msg);
+ assertEquals("Message content-type is incorrect",
+ AMQPEncodedMapMessage.MIME_TYPE,
+ ((AbstractJMSMessage)msg).getContentType());
+
+ Map<String,Object> mainMap = (Map<String,Object>)msg.getObject("Map");
+ assertNotNull("Main Map not received",mainMap);
+
+ Map<String,String> map = (Map<String,String>)mainMap.get("map");
+ assertNotNull("Nested Map not received",map);
+ int i = 1;
+ for (String str: map.keySet())
+ {
+ assertEquals("String" + i,map.get(str));
+ i++;
+ }
+
+ List<String> list = (List<String>)mainMap.get("list");
+ assertNotNull("Nested List not received",list);
+ i = 1;
+ for (String str: list)
+ {
+ assertEquals("String" + i,str);
+ i++;
+ }
+ }
+
+ private List<String> getList()
+ {
+ List<String> myList = new ArrayList<String>();
+ myList.add("String1");
+ myList.add("String2");
+ myList.add("String3");
+
+ return myList;
+ }
+
+ private Map<String,String> getMap()
+ {
+ Map<String,String> myMap = new HashMap<String,String>();
+ myMap.put("Key1","String1");
+ myMap.put("Key2","String2");
+ myMap.put("Key3","String3");
+
+ return myMap;
+ }
+
public void tearDown() throws Exception
{
//clean up