From b700f07e48dcc547c9156ccc7931f528af4146a1 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Tue, 9 Oct 2018 10:15:43 -0400 Subject: [PATCH] Fail fast during app start up --- .../MetadataSourcesUiDefinitionController.groovy | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataSourcesUiDefinitionController.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataSourcesUiDefinitionController.groovy index 9d790f362..74f5e6d8c 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataSourcesUiDefinitionController.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataSourcesUiDefinitionController.groovy @@ -2,7 +2,8 @@ package edu.internet2.tier.shibboleth.admin.ui.controller import com.fasterxml.jackson.databind.ObjectMapper import edu.internet2.tier.shibboleth.admin.ui.configuration.CustomAttributesConfiguration -import groovy.json.JsonOutput + +import org.springframework.beans.factory.BeanInitializationException import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.context.properties.ConfigurationProperties import org.springframework.core.io.ResourceLoader @@ -19,6 +20,7 @@ import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR * interface in terms of JSON schema. * * @author Dmitriy Kopylenko + * @author Bill Smith (wsmith@unicon.net) */ @RestController('/api/ui/MetadataSources') @ConfigurationProperties('shibui') @@ -64,5 +66,17 @@ class MetadataSourcesUiDefinitionController { @PostConstruct def init() { jsonSchemaUrl = this.resourceLoader.getResource(this.metadataSourcesUiSchemaLocation).getURL() + //Detect malformed JSON schema early, during application start up and fail fast with useful exception message + try { + this.jacksonObjectMapper.readValue(this.jsonSchemaUrl, Map) + } + catch (Exception e) { + def msg = """ + An error is detected during JSON parsing => [${e.message}] + ********************************************************** + Offending resource => [${this.jsonSchemaUrl}] + """ + throw new BeanInitializationException(msg.toString(), e) + } } }