Add value-type attrib to beans->map->entry element

Previously, the <value> subelement of a map <entry> allowed one to
specify the type of a specific map entry value. This patch allows a
value-type attribute as well, such that instead of the following
syntax

    <entry key="x-message-ttl">
        <value type="java.lang.Long">100</value>
    </entry>
    <entry key="x-ha-policy" value="all" />

one can now use the more concise form

    <entry key="x-message-ttl" value="100" value-type="java.lang.Long"/>
    <entry key="x-ha-policy" value="all"/>

The new value-type attribute may be used at the <map> level as well,
indicating that all elements are of the same type.

Appropriate tests have been added exercising value-type at the <map> and
<entry> levels.

Issue: SPR-9249
This commit is contained in:
Gary Russell
2012-03-19 19:59:10 -04:00
committed by Chris Beams
parent f3bcb6e2e4
commit 183ac0c1ff
4 changed files with 31 additions and 5 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -196,11 +196,15 @@ public class XmlBeanCollectionTests {
@Test
public void testMapWithLiteralsAndReferences() throws Exception {
HasMap hasMap = (HasMap) this.beanFactory.getBean("mixedMap");
assertTrue(hasMap.getMap().size() == 3);
assertTrue(hasMap.getMap().size() == 5);
assertTrue(hasMap.getMap().get("foo").equals(new Integer(10)));
TestBean jenny = (TestBean) this.beanFactory.getBean("jenny");
assertTrue(hasMap.getMap().get("jenny") == jenny);
assertTrue(hasMap.getMap().get(new Integer(5)).equals("david"));
assertTrue(hasMap.getMap().get("bar") instanceof Long);
assertTrue(hasMap.getMap().get("bar").equals(new Long(100)));
assertTrue(hasMap.getMap().get("baz") instanceof Integer);
assertTrue(hasMap.getMap().get("baz").equals(new Integer(200)));
}
@Test