diff options
author | Rajith Muditha Attapattu <rajith@apache.org> | 2010-04-09 15:37:06 +0000 |
---|---|---|
committer | Rajith Muditha Attapattu <rajith@apache.org> | 2010-04-09 15:37:06 +0000 |
commit | 562660196b4d33ed52fe7788592dc757c527719e (patch) | |
tree | 3884e0560ae85d453106adcfd7e129dc6008c4ac | |
parent | f328f8dfb20911b952f0c5551cc37c0b8d42576d (diff) | |
download | qpid-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
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 |