diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java index 25e9b9fd..fdd6b95a 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java @@ -28,6 +28,8 @@ import java.util.Map.Entry; import javax.servlet.http.HttpServletResponse; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.yaml.snakeyaml.DumperOptions.FlowStyle; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.nodes.Tag; @@ -65,6 +67,8 @@ import static org.springframework.cloud.config.server.support.EnvironmentPropert @RequestMapping(method = RequestMethod.GET, path = "${spring.cloud.config.server.prefix:}") public class EnvironmentController { + private static final Log LOG = LogFactory.getLog(EnvironmentController.class); + private EnvironmentRepository repository; private ObjectMapper objectMapper; @@ -121,13 +125,20 @@ public class EnvironmentController { } public Environment getEnvironment(String name, String profiles, String label, boolean includeOrigin) { - name = normalize(name); - label = normalize(label); - Environment environment = this.repository.findOne(name, profiles, label, includeOrigin); - if (!this.acceptEmpty && (environment == null || environment.getPropertySources().isEmpty())) { - throw new EnvironmentNotFoundException("Profile Not found"); + try { + name = normalize(name); + label = normalize(label); + Environment environment = this.repository.findOne(name, profiles, label, includeOrigin); + if (!this.acceptEmpty && (environment == null || environment.getPropertySources().isEmpty())) { + throw new EnvironmentNotFoundException("Profile Not found"); + } + return environment; + } + catch (Exception e) { + LOG.warn(String.format("Error getting the Environment with name=%s profiles=%s label=%s includeOrigin=%b", + name, profiles, label, includeOrigin), e); + throw e; } - return environment; } private String normalize(String part) { diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/VanillaConfigServerIntegrationTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/VanillaConfigServerIntegrationTests.java index 4ab7db3f..2caf5e00 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/VanillaConfigServerIntegrationTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/VanillaConfigServerIntegrationTests.java @@ -89,4 +89,12 @@ public class VanillaConfigServerIntegrationTests { assertThat(response.getBody().length).isEqualTo(expected.length()); } + @Test + public void invalidYaml() { + ResponseEntity response = new TestRestTemplate().exchange( + "http://localhost:" + this.port + "/invalid/default", HttpMethod.GET, getV2AcceptEntity(), + Environment.class); + assertThat(response.getStatusCodeValue()).isEqualTo(500); + } + } diff --git a/spring-cloud-config-server/src/test/resources/config-repo/invalid.yaml b/spring-cloud-config-server/src/test/resources/config-repo/invalid.yaml new file mode 100644 index 00000000..7fedb659 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/config-repo/invalid.yaml @@ -0,0 +1,3 @@ +spring: + flyway: + url: jdbc:mariadb://${db.host}/${db.name}