blob: aa1c8012c01c145563c49b4121f92858a0508231 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.test.message;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.jms.JMSException;
import javax.jms.Message;
import org.apache.activemq.test.JmsTopicSendReceiveWithTwoConnectionsAndEmbeddedBrokerTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Tests that a Message can have nested Map and List properties attached.
*
*
*/
public class NestedMapAndListPropertyTest extends JmsTopicSendReceiveWithTwoConnectionsAndEmbeddedBrokerTest {
private static final Logger LOG = LoggerFactory.getLogger(NestedMapAndListPropertyTest.class);
protected void assertMessageValid(int index, Message message) throws JMSException {
Object value = message.getObjectProperty("textField");
assertEquals("textField", data[index], value);
Map map = (Map)message.getObjectProperty("mapField");
assertNotNull(map);
assertEquals("mapField.a", "foo", map.get("a"));
assertEquals("mapField.b", new Integer(23), map.get("b"));
assertEquals("mapField.c", new Long(45), map.get("c"));
value = map.get("d");
assertTrue("mapField.d should be a Map", value instanceof Map);
map = (Map)value;
assertEquals("mapField.d.x", "abc", map.get("x"));
value = map.get("y");
assertTrue("mapField.d.y is a List", value instanceof List);
List list = (List)value;
LOG.debug("mapField.d.y: " + list);
assertEquals("listField.size", 3, list.size());
LOG.debug("Found map: " + map);
list = (List)message.getObjectProperty("listField");
LOG.debug("listField: " + list);
assertEquals("listField.size", 3, list.size());
assertEquals("listField[0]", "a", list.get(0));
assertEquals("listField[1]", "b", list.get(1));
assertEquals("listField[2]", "c", list.get(2));
assertEquals("JohnDoe", message.getStringProperty("JMSXUserID"));
}
protected Message createMessage(int index) throws JMSException {
Message answer = session.createMessage();
answer.setStringProperty("textField", data[index]);
Map<String, Object> grandChildMap = new HashMap<String, Object>();
grandChildMap.put("x", "abc");
grandChildMap.put("y", Arrays.asList(new Object[] {"a", "b", "c"}));
Map<String, Object> nestedMap = new HashMap<String, Object>();
nestedMap.put("a", "foo");
nestedMap.put("b", new Integer(23));
nestedMap.put("c", new Long(45));
nestedMap.put("d", grandChildMap);
answer.setObjectProperty("mapField", nestedMap);
answer.setObjectProperty("listField", Arrays.asList(new Object[] {"a", "b", "c"}));
answer.setStringProperty("JMSXUserID", "JohnDoe");
return answer;
}
}