diff --git a/config/src/main/java/com/typesafe/config/ConfigFactory.java b/config/src/main/java/com/typesafe/config/ConfigFactory.java index c3012db0..31acf3de 100644 --- a/config/src/main/java/com/typesafe/config/ConfigFactory.java +++ b/config/src/main/java/com/typesafe/config/ConfigFactory.java @@ -11,6 +11,7 @@ import java.util.Map; import java.util.Properties; import com.typesafe.config.impl.ConfigImpl; +import com.typesafe.config.impl.ConfigUtil; import com.typesafe.config.impl.Parseable; /** @@ -173,7 +174,11 @@ public final class ConfigFactory { * @return configuration for an application */ public static Config load() { - return DefaultConfigHolder.defaultConfig; + try { + return DefaultConfigHolder.defaultConfig; + } catch (ExceptionInInitializerError e) { + throw ConfigUtil.extractInitializerError(e); + } } /** diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigImpl.java b/config/src/main/java/com/typesafe/config/impl/ConfigImpl.java index ddb81049..8c016d6f 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigImpl.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigImpl.java @@ -305,7 +305,11 @@ public class ConfigImpl { } static ConfigIncluder defaultIncluder() { - return DefaultIncluderHolder.defaultIncluder; + try { + return DefaultIncluderHolder.defaultIncluder; + } catch (ExceptionInInitializerError e) { + throw ConfigUtil.extractInitializerError(e); + } } private static AbstractConfigObject loadSystemProperties() { @@ -319,7 +323,11 @@ public class ConfigImpl { } static AbstractConfigObject systemPropertiesAsConfigObject() { - return SystemPropertiesHolder.systemProperties; + try { + return SystemPropertiesHolder.systemProperties; + } catch (ExceptionInInitializerError e) { + throw ConfigUtil.extractInitializerError(e); + } } /** For use ONLY by library internals, DO NOT TOUCH not guaranteed ABI */ @@ -351,7 +359,11 @@ public class ConfigImpl { } static AbstractConfigObject envVariablesAsConfigObject() { - return EnvVariablesHolder.envVariables; + try { + return EnvVariablesHolder.envVariables; + } catch (ExceptionInInitializerError e) { + throw ConfigUtil.extractInitializerError(e); + } } /** For use ONLY by library internals, DO NOT TOUCH not guaranteed ABI */ @@ -369,6 +381,10 @@ public class ConfigImpl { /** For use ONLY by library internals, DO NOT TOUCH not guaranteed ABI */ public static Config defaultReference() { - return ReferenceHolder.referenceConfig; + try { + return ReferenceHolder.referenceConfig; + } catch (ExceptionInInitializerError e) { + throw ConfigUtil.extractInitializerError(e); + } } } diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigUtil.java b/config/src/main/java/com/typesafe/config/impl/ConfigUtil.java index bfd8f055..c3f0edf5 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigUtil.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigUtil.java @@ -3,6 +3,8 @@ */ package com.typesafe.config.impl; +import com.typesafe.config.ConfigException; + /** This is public just for the "config" package to use, don't touch it */ final public class ConfigUtil { @@ -118,4 +120,14 @@ final public class ConfigUtil { } return s.substring(start, end); } + + /** This is public just for the "config" package to use, don't touch it! */ + public static ConfigException extractInitializerError(ExceptionInInitializerError e) { + Throwable cause = e.getCause(); + if (cause != null && cause instanceof ConfigException) { + return (ConfigException) cause; + } else { + throw e; + } + } }