Browse Source

Prevent exception when loading optional config data locations

Closes gh-35683
pull/38228/head
Moritz Halbritter 2 years ago
parent
commit
b266ade00c
  1. 3
      spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/StandardConfigDataLocationResolver.java
  2. 25
      spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/StandardConfigDataLocationResolverTests.java

3
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/StandardConfigDataLocationResolver.java

@ -226,6 +226,9 @@ public class StandardConfigDataLocationResolver @@ -226,6 +226,9 @@ public class StandardConfigDataLocationResolver
return Collections.singleton(reference);
}
}
if (configDataLocation.isOptional()) {
return Collections.emptySet();
}
throw new IllegalStateException("File extension is not known to any PropertySourceLoader. "
+ "If the location is meant to reference a directory, it must end in '/' or File.separator");
}

25
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/StandardConfigDataLocationResolverTests.java

@ -43,18 +43,19 @@ import static org.mockito.Mockito.mock; @@ -43,18 +43,19 @@ import static org.mockito.Mockito.mock;
*
* @author Madhura Bhave
* @author Phillip Webb
* @author Moritz Halbritter
*/
class StandardConfigDataLocationResolverTests {
private StandardConfigDataLocationResolver resolver;
private ConfigDataLocationResolverContext context = mock(ConfigDataLocationResolverContext.class);
private final ConfigDataLocationResolverContext context = mock(ConfigDataLocationResolverContext.class);
private MockEnvironment environment;
private Binder environmentBinder;
private ResourceLoader resourceLoader = new DefaultResourceLoader();
private final ResourceLoader resourceLoader = new DefaultResourceLoader();
@BeforeEach
void setup() {
@ -260,6 +261,26 @@ class StandardConfigDataLocationResolverTests { @@ -260,6 +261,26 @@ class StandardConfigDataLocationResolverTests {
assertThat(locations).isEmpty();
}
@Test
void resolveWhenOptionalAndLoaderIsUnknownShouldNotFail() {
ConfigDataLocation location = ConfigDataLocation.of("optional:some-unknown-loader:dummy.properties");
assertThatNoException().isThrownBy(() -> this.resolver.resolve(this.context, location));
}
@Test
void resolveWhenOptionalAndLoaderIsUnknownAndExtensionIsUnknownShouldNotFail() {
ConfigDataLocation location = ConfigDataLocation
.of("optional:some-unknown-loader:dummy.some-unknown-extension");
List<StandardConfigDataResource> locations = this.resolver.resolve(this.context, location);
assertThatNoException().isThrownBy(() -> this.resolver.resolve(this.context, location));
}
@Test
void resolveWhenOptionalAndExtensionIsUnknownShouldNotFail() {
ConfigDataLocation location = ConfigDataLocation.of("optional:file:dummy.some-unknown-extension");
assertThatNoException().isThrownBy(() -> this.resolver.resolve(this.context, location));
}
private String filePath(String... components) {
return "file [" + String.join(File.separator, components) + "]";
}

Loading…
Cancel
Save