Browse Source

Process CompositePropertySources before EnumerablePropertySources

PropertySourcePropertyValues tries to process a PropertySource first
as an EnumerablePropertySource and then as a CompositePropertySource.
In Spring 4.1.2 CompositePropertySource was updated to extend
EnumerablePropertySource. This change meant that a
CompositePropertySource would always be processed as an
EnumerablePropertySource.

This commit updates PropertySourcePropertyValues to process a
PropertySource as a CompositePropertySource first and to then try it
is an EnumerablePropertySource.

Fixes gh-2608
pull/2707/merge
Andy Wilkinson 11 years ago
parent
commit
fc4376145c
  1. 13
      spring-boot/src/main/java/org/springframework/boot/bind/PropertySourcesPropertyValues.java

13
spring-boot/src/main/java/org/springframework/boot/bind/PropertySourcesPropertyValues.java

@ -98,14 +98,14 @@ public class PropertySourcesPropertyValues implements PropertyValues { @@ -98,14 +98,14 @@ public class PropertySourcesPropertyValues implements PropertyValues {
private void processPropertySource(PropertySource<?> source,
PropertySourcesPropertyResolver resolver,
PropertyNamePatternsMatcher includes, Collection<String> exacts) {
if (source instanceof EnumerablePropertySource) {
processEnumerablePropertySource((EnumerablePropertySource<?>) source,
resolver, includes, exacts);
}
else if (source instanceof CompositePropertySource) {
if (source instanceof CompositePropertySource) {
processCompositePropertySource((CompositePropertySource) source, resolver,
includes, exacts);
}
else if (source instanceof EnumerablePropertySource) {
processEnumerablePropertySource((EnumerablePropertySource<?>) source,
resolver, includes);
}
else {
// We can only do exact matches for non-enumerable property names, but
// that's better than nothing...
@ -114,8 +114,7 @@ public class PropertySourcesPropertyValues implements PropertyValues { @@ -114,8 +114,7 @@ public class PropertySourcesPropertyValues implements PropertyValues {
}
private void processEnumerablePropertySource(EnumerablePropertySource<?> source,
PropertySourcesPropertyResolver resolver,
PropertyNamePatternsMatcher includes, Collection<String> exacts) {
PropertySourcesPropertyResolver resolver, PropertyNamePatternsMatcher includes) {
if (source.getPropertyNames().length > 0) {
for (String propertyName : source.getPropertyNames()) {
if (PropertySourcesPropertyValues.PATTERN_MATCHED_PROPERTY_SOURCES

Loading…
Cancel
Save