diff --git a/spring-boot/src/main/java/org/springframework/boot/env/YamlPropertySourceLoader.java b/spring-boot/src/main/java/org/springframework/boot/env/YamlPropertySourceLoader.java index 28db8f3ca6..df3530e4ed 100755 --- a/spring-boot/src/main/java/org/springframework/boot/env/YamlPropertySourceLoader.java +++ b/spring-boot/src/main/java/org/springframework/boot/env/YamlPropertySourceLoader.java @@ -40,12 +40,13 @@ public class YamlPropertySourceLoader implements PropertySourceLoader { @Override public PropertySource load(String name, Resource resource, String profile) throws IOException { - if (ClassUtils.isPresent("org.yaml.snakeyaml.Yaml", null)) { - Map source = new OriginTrackedYamlLoader(resource, profile) - .load(); - if (!source.isEmpty()) { - return new OriginTrackedMapPropertySource(name, source); - } + if (!ClassUtils.isPresent("org.yaml.snakeyaml.Yaml", null)) { + throw new IllegalStateException("Attempted to load " + name + " but snakeyaml was not found on the classpath"); + } + Map source = new OriginTrackedYamlLoader(resource, profile) + .load(); + if (!source.isEmpty()) { + return new OriginTrackedMapPropertySource(name, source); } return null; } diff --git a/spring-boot/src/test/java/org/springframework/boot/env/NoSnakeYamlPropertySourceLoaderTests.java b/spring-boot/src/test/java/org/springframework/boot/env/NoSnakeYamlPropertySourceLoaderTests.java new file mode 100644 index 0000000000..b8c135808a --- /dev/null +++ b/spring-boot/src/test/java/org/springframework/boot/env/NoSnakeYamlPropertySourceLoaderTests.java @@ -0,0 +1,52 @@ +/* + * Copyright 2012-2017 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.env; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; + +import org.springframework.boot.junit.runner.classpath.ClassPathExclusions; +import org.springframework.boot.junit.runner.classpath.ModifiedClassPathRunner; +import org.springframework.core.io.ByteArrayResource; + +/** + * Tests for {@link YamlPropertySourceLoader} when snakeyaml is not available. + * + * @author Madhura Bhave + */ +@RunWith(ModifiedClassPathRunner.class) +@ClassPathExclusions("snakeyaml-*.jar") +public class NoSnakeYamlPropertySourceLoaderTests { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + private YamlPropertySourceLoader loader = new YamlPropertySourceLoader(); + + @Test + public void load() throws Exception { + this.thrown.expect(IllegalStateException.class); + this.thrown.expectMessage("Attempted to load resource but snakeyaml was not found on the classpath"); + ByteArrayResource resource = new ByteArrayResource( + "foo:\n bar: spam".getBytes()); + this.loader.load("resource", resource, null); + } + +} +