From 4896b7d75d7c38667e57164d9b6f4d00aabc4a19 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Wed, 30 Nov 2011 09:01:48 -0500 Subject: [PATCH] When using "singleton holder" catch ExceptionInInitializerError and pull out the ConfigException if any --- .../com/typesafe/config/ConfigFactory.java | 7 +++++- .../com/typesafe/config/impl/ConfigImpl.java | 24 +++++++++++++++---- .../com/typesafe/config/impl/ConfigUtil.java | 12 ++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) 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; + } + } }