Only use PropertySource.getValue() as a fallback

It converts everything to a String so it isn't helpful to use
it as a default.

Fixes gh-2891.
This commit is contained in:
Dave Syer 2015-04-28 11:47:50 +01:00
parent b54960f072
commit efa7ad8370
2 changed files with 16 additions and 2 deletions

View File

@ -121,12 +121,15 @@ public class PropertySourcesPropertyValues implements PropertyValues {
.contains(source.getName()) && !includes.matches(propertyName)) {
continue;
}
Object value = source.getProperty(propertyName);
Object value = null;
try {
value = resolver.getProperty(propertyName);
value = resolver.getProperty(propertyName, Object.class);
}
catch (RuntimeException ex) {
// Probably could not resolve placeholders, ignore it here
if (value == null) {
value = source.getProperty(propertyName);
}
}
if (!this.propertyValues.containsKey(propertyName)) {
this.propertyValues.put(propertyName, new PropertyValue(propertyName,

View File

@ -57,6 +57,17 @@ public class PropertySourcesPropertyValuesTests {
.<String, Object> singletonMap("name", "${foo}")));
}
@Test
public void testTypesPreserved() {
this.propertySources.replace(
"map",
new MapPropertySource("map", Collections.<String, Object> singletonMap(
"name", 123)));
PropertySourcesPropertyValues propertyValues = new PropertySourcesPropertyValues(
this.propertySources);
assertEquals(123, propertyValues.getPropertyValues()[0].getValue());
}
@Test
public void testSize() {
PropertySourcesPropertyValues propertyValues = new PropertySourcesPropertyValues(