diff --git a/config/src/main/java/com/typesafe/config/ConfigFactory.java b/config/src/main/java/com/typesafe/config/ConfigFactory.java
index 12f9aaec..8236713c 100644
--- a/config/src/main/java/com/typesafe/config/ConfigFactory.java
+++ b/config/src/main/java/com/typesafe/config/ConfigFactory.java
@@ -8,7 +8,7 @@ import com.typesafe.config.impl.Parseable;
import java.io.File;
import java.io.Reader;
-import java.net.URL;
+import java.net.*;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Callable;
@@ -1090,6 +1090,63 @@ public final class ConfigFactory {
return parseResourcesAnySyntax(resourceBasename, ConfigParseOptions.defaults());
}
+ /**
+ * Parse only any application overrides (those specified by config.{resource,file,url}), returning
+ * an empty Config if no overrides were set.
+ * @param parseOptions parse options
+ * @return the parsed configuration
+ */
+ public static Config parseApplicationOverride(ConfigParseOptions parseOptions) {
+ ClassLoader loader = parseOptions.getClassLoader();
+
+ if (loader == null)
+ throw new ConfigException.BugOrBroken(
+ "ClassLoader should have been set here; bug in ConfigFactory. "
+ + "(You can probably work around this bug by passing in a class loader or calling currentThread().setContextClassLoader() though.)");
+
+ int specified = 0;
+
+ // override application.conf with config.file, config.resource,
+ // config.url if requested.
+ String resource = System.getProperty("config.resource");
+ if (resource != null)
+ specified += 1;
+ String file = System.getProperty("config.file");
+ if (file != null)
+ specified += 1;
+ String url = System.getProperty("config.url");
+ if (url != null)
+ specified += 1;
+
+ if (specified == 0) {
+ return ConfigImpl.emptyConfig("TODO: what to put here? Should something else be returned?");
+ } else if (specified > 1) {
+ throw new ConfigException.Generic("You set more than one of config.file='" + file
+ + "', 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 ConfigFactory.parseResources(loader, resource, overrideOptions);
+ } else if (file != null) {
+ return ConfigFactory.parseFile(new File(file), overrideOptions);
+ } else {
+ try {
+ return ConfigFactory.parseURL(new URL(url), overrideOptions);
+ } catch (MalformedURLException e) {
+ throw new ConfigException.Generic("Bad URL in config.url system property: '"
+ + url + "': " + e.getMessage(), e);
+ }
+ }
+ }
+
+ }
+
/**
* Parses a string (which should be valid HOCON or JSON by default, or
* the syntax specified in the options otherwise).
diff --git a/config/src/main/java/com/typesafe/config/DefaultConfigLoadingStrategy.java b/config/src/main/java/com/typesafe/config/DefaultConfigLoadingStrategy.java
index 1063af09..d655f5db 100644
--- a/config/src/main/java/com/typesafe/config/DefaultConfigLoadingStrategy.java
+++ b/config/src/main/java/com/typesafe/config/DefaultConfigLoadingStrategy.java
@@ -1,5 +1,7 @@
package com.typesafe.config;
+import com.typesafe.config.impl.*;
+
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
@@ -12,51 +14,11 @@ import java.net.URL;
public class DefaultConfigLoadingStrategy implements ConfigLoadingStrategy {
@Override
public Config parseApplicationConfig(ConfigParseOptions parseOptions) {
- ClassLoader loader = parseOptions.getClassLoader();
- if (loader == null)
- throw new ConfigException.BugOrBroken(
- "ClassLoader should have been set here; bug in ConfigFactory. "
- + "(You can probably work around this bug by passing in a class loader or calling currentThread().setContextClassLoader() though.)");
-
- int specified = 0;
-
- // override application.conf with config.file, config.resource,
- // config.url if requested.
- String resource = System.getProperty("config.resource");
- if (resource != null)
- specified += 1;
- String file = System.getProperty("config.file");
- if (file != null)
- specified += 1;
- String url = System.getProperty("config.url");
- if (url != null)
- specified += 1;
-
- if (specified == 0) {
+ Config overrideConfig = ConfigFactory.parseApplicationOverride(parseOptions);
+ if (overrideConfig.isEmpty()) {
return ConfigFactory.parseResourcesAnySyntax("application", parseOptions);
- } else if (specified > 1) {
- throw new ConfigException.Generic("You set more than one of config.file='" + file
- + "', 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 ConfigFactory.parseResources(loader, resource, overrideOptions);
- } else if (file != null) {
- return ConfigFactory.parseFile(new File(file), overrideOptions);
- } else {
- try {
- return ConfigFactory.parseURL(new URL(url), overrideOptions);
- } catch (MalformedURLException e) {
- throw new ConfigException.Generic("Bad URL in config.url system property: '"
- + url + "': " + e.getMessage(), e);
- }
- }
+ return overrideConfig;
}
}
}
diff --git a/config/src/main/main.iml b/config/src/main/main.iml
new file mode 100644
index 00000000..908ad4f5
--- /dev/null
+++ b/config/src/main/main.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/config/src/test/test.iml b/config/src/test/test.iml
new file mode 100644
index 00000000..13a67212
--- /dev/null
+++ b/config/src/test/test.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file