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 | 0db7d33b5193a195dbd0cbda3160ed91c107247d (patch) | |
| tree | b03ad5028fa70afbce6f6839f74fe473d9e1be63 /java | |
| parent | 178f17b6a82df278116c026c7f67443cb92b52c2 (diff) | |
| download | qpid-python-0db7d33b5193a195dbd0cbda3160ed91c107247d.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/qpid@932467 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
3 files changed, 134 insertions, 1 deletions
diff --git a/java/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessage.java b/java/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessage.java index f66387e734..6e22292ee0 100644 --- a/java/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessage.java +++ b/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/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java b/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java index 73f3afab03..306ffeeadf 100644 --- a/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java +++ b/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/java/systests/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessageTest.java b/java/systests/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessageTest.java index 96ce744075..5886ffc9f8 100644 --- a/java/systests/src/main/java/org/apache/qpid/client/message/AMQPEncodedMapMessageTest.java +++ b/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 |
