diff --git a/config/src/main/java/com/typesafe/config/ConfigFactory.java b/config/src/main/java/com/typesafe/config/ConfigFactory.java index f818a2c4..ce8ab19e 100644 --- a/config/src/main/java/com/typesafe/config/ConfigFactory.java +++ b/config/src/main/java/com/typesafe/config/ConfigFactory.java @@ -219,21 +219,22 @@ public final class ConfigFactory { + "', config.url='" + url + "', config.resource='" + resource + "'; don't know which one to use!"); } else { + // the override file/url/resource MUST be present or it's an error + ConfigParseOptions overrideOptions = parseOptions.setAllowMissing(false); if (resource != null) { if (resource.startsWith("/")) resource = resource.substring(1); // this deliberately does not parseResourcesAnySyntax; if // people want that they can use an include statement. - return load(loader, parseResources(loader, resource, parseOptions), resolveOptions); + Config parsedResources = parseResources(loader, resource, overrideOptions); + return load(loader, parsedResources, resolveOptions); } else if (file != null) { - return load( - loader, - parseFile(new File(file), parseOptions), resolveOptions); + Config parsedFile = parseFile(new File(file), overrideOptions); + return load(loader, parsedFile, resolveOptions); } else { try { - return load( - loader, - parseURL(new URL(url), parseOptions), resolveOptions); + Config parsedURL = parseURL(new URL(url), overrideOptions); + return load(loader, parsedURL, resolveOptions); } catch (MalformedURLException e) { throw new ConfigException.Generic("Bad URL in config.url system property: '" + url + "': " + e.getMessage(), e); diff --git a/config/src/test/scala/com/typesafe/config/impl/PublicApiTest.scala b/config/src/test/scala/com/typesafe/config/impl/PublicApiTest.scala index e95f4261..67b6d3dc 100644 --- a/config/src/test/scala/com/typesafe/config/impl/PublicApiTest.scala +++ b/config/src/test/scala/com/typesafe/config/impl/PublicApiTest.scala @@ -828,20 +828,48 @@ class PublicApiTest extends TestUtils { } @Test - def missingConfFails() { + def missingOverrideResourceFails() { + assertEquals("config.file is not set", null, System.getProperty("config.file")) val old = System.getProperty("config.resource") - System.setProperty("config.resource", "donotexists.conf") - intercept[ConfigException.IO] { - ConfigFactory.load(ConfigParseOptions.defaults().setAllowMissing(false)) + try { + System.setProperty("config.resource", "donotexists.conf") + intercept[ConfigException.IO] { + ConfigFactory.load() + } + } finally { + // cleanup properties + Option(old).map { v => + System.setProperty("config.resource", v) + v + }.orElse { + System.clearProperty("config.resource") + None + } + assertEquals("config.resource restored", old, System.getProperty("config.resource")) + ConfigImpl.reloadSystemPropertiesConfig() } + } - // cleanup properties - Option(old).map { v => - System.setProperty("config.resource", v) - v - }.orElse { - System.clearProperty("config.resource") - None + @Test + def missingOverrideFileFails() { + assertEquals("config.resource is not set", null, System.getProperty("config.resource")) + val old = System.getProperty("config.file") + try { + System.setProperty("config.file", "donotexists.conf") + intercept[ConfigException.IO] { + ConfigFactory.load() + } + } finally { + // cleanup properties + Option(old).map { v => + System.setProperty("config.file", v) + v + }.orElse { + System.clearProperty("config.file") + None + } + assertEquals("config.file restored", old, System.getProperty("config.file")) + ConfigImpl.reloadSystemPropertiesConfig() } }