Browse Source

Merge branch garyrussell/SPR-9249

* SPR-9249:
  Add value-type attrib to beans->map->entry element
pull/82/head
Chris Beams 14 years ago
parent
commit
6a01ca6d35
  1. 14
      spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java
  2. 8
      spring-beans/src/main/resources/org/springframework/beans/factory/xml/spring-beans-3.2.xsd
  3. 8
      spring-beans/src/test/java/org/springframework/beans/factory/xml/XmlBeanCollectionTests.java
  4. 6
      spring-beans/src/test/resources/org/springframework/beans/factory/xml/collections.xml

14
spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java

@ -78,6 +78,7 @@ import org.springframework.util.xml.DomUtils; @@ -78,6 +78,7 @@ import org.springframework.util.xml.DomUtils;
* @author Juergen Hoeller
* @author Rod Johnson
* @author Mark Fisher
* @author Gary Russell
* @since 2.0
* @see ParserContext
* @see DefaultBeanDefinitionDocumentReader
@ -1302,13 +1303,24 @@ public class BeanDefinitionParserDelegate { @@ -1302,13 +1303,24 @@ public class BeanDefinitionParserDelegate {
Object value = null;
boolean hasValueAttribute = entryEle.hasAttribute(VALUE_ATTRIBUTE);
boolean hasValueRefAttribute = entryEle.hasAttribute(VALUE_REF_ATTRIBUTE);
boolean hasValueTypeAttribute = entryEle.hasAttribute(VALUE_TYPE_ATTRIBUTE);
if ((hasValueAttribute && hasValueRefAttribute) ||
((hasValueAttribute || hasValueRefAttribute)) && valueEle != null) {
error("<entry> element is only allowed to contain either " +
"'value' attribute OR 'value-ref' attribute OR <value> sub-element", entryEle);
}
if ((hasValueTypeAttribute && hasValueRefAttribute) ||
(hasValueTypeAttribute && !hasValueAttribute) ||
(hasValueTypeAttribute && valueEle != null)) {
error("<entry> element is only allowed to contain a 'value-type' " +
"attribute when it has a 'value' attribute", entryEle);
}
if (hasValueAttribute) {
value = buildTypedStringValueForMap(entryEle.getAttribute(VALUE_ATTRIBUTE), defaultValueType, entryEle);
String valueType = entryEle.getAttribute(VALUE_TYPE_ATTRIBUTE);
if (!StringUtils.hasText(valueType)) {
valueType = defaultValueType;
}
value = buildTypedStringValueForMap(entryEle.getAttribute(VALUE_ATTRIBUTE), valueType, entryEle);
}
else if (hasValueRefAttribute) {
String refName = entryEle.getAttribute(VALUE_REF_ATTRIBUTE);

8
spring-beans/src/main/resources/org/springframework/beans/factory/xml/spring-beans-3.2.xsd

@ -1153,6 +1153,14 @@ @@ -1153,6 +1153,14 @@
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="value-type" type="xsd:string">
<xsd:annotation>
<xsd:documentation><![CDATA[
A short-cut alternative to a 'type' attribute on a nested
"<value type='...' >...</value>" element.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<!-- 'props' collection type -->

8
spring-beans/src/test/java/org/springframework/beans/factory/xml/XmlBeanCollectionTests.java

@ -1,5 +1,5 @@ @@ -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 { @@ -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

6
spring-beans/src/test/resources/org/springframework/beans/factory/xml/collections.xml

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<bean id="jenny" class="test.beans.TestBean">
<property name="name"><value>Jenny</value></property>
@ -133,7 +133,7 @@ @@ -133,7 +133,7 @@
<bean id="mixedMap" class="org.springframework.beans.factory.xml.HasMap">
<property name="map">
<map>
<map value-type="java.lang.Integer">
<entry key-ref="fooKey">
<value type="java.lang.Integer">10</value>
</entry>
@ -151,6 +151,8 @@ @@ -151,6 +151,8 @@
</key>
<idref bean="david"/>
</entry>
<entry key="bar" value="100" value-type="java.lang.Long"/>
<entry key="baz" value="200"/>
</map>
</property>
</bean>

Loading…
Cancel
Save