From debc645c6941749b15eef5375afd8bbd9c23c298 Mon Sep 17 00:00:00 2001 From: Yoshito Umaoka Date: Thu, 14 Jan 2010 00:07:59 +0000 Subject: [PATCH] ICU-7308 Added Utility.getFallbackClassLoader() and call it from 4 different places recently updated. This change was made by Doug's suggestion. X-SVN-Rev: 27257 --- .../com/ibm/icu/impl/ICULocaleService.java | 11 +---------- .../com/ibm/icu/impl/ICUResourceBundle.java | 10 +--------- .../ibm/icu/impl/ResourceBundleWrapper.java | 10 +--------- .../core/src/com/ibm/icu/impl/URLHandler.java | 12 ++---------- .../core/src/com/ibm/icu/impl/Utility.java | 19 ++++++++++++++++++- 5 files changed, 23 insertions(+), 39 deletions(-) diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/ICULocaleService.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/ICULocaleService.java index 1ad716693aa..660a67074f1 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/ICULocaleService.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/ICULocaleService.java @@ -573,17 +573,8 @@ public class ICULocaleService extends ICUService { protected ClassLoader loader() { ClassLoader cl = getClass().getClassLoader(); if (cl == null) { - cl = Thread.currentThread().getContextClassLoader(); - if (cl == null) { - cl = ClassLoader.getSystemClassLoader(); - if (cl == null) { - //TODO It is not guaranteed that we can get non-null class loader - // by the Java specification. - throw new RuntimeException("No accessible class loader is available for loading ICU resource bundles."); - } - } + cl = Utility.getFallbackClassLoader(); } - return cl; } diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/ICUResourceBundle.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/ICUResourceBundle.java index eae330aacfd..5c2219c3483 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/ICUResourceBundle.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/ICUResourceBundle.java @@ -92,15 +92,7 @@ public class ICUResourceBundle extends UResourceBundle { static { ClassLoader loader = ICUData.class.getClassLoader(); if (loader == null) { - loader = Thread.currentThread().getContextClassLoader(); - if (loader == null) { - loader = ClassLoader.getSystemClassLoader(); - if (loader == null) { - //TODO It is not guaranteed that we can get non-null class loader - // by the Java specification. - throw new RuntimeException("No accessible class loader is available for ICUData"); - } - } + loader = Utility.getFallbackClassLoader(); } ICU_DATA_CLASS_LOADER = loader; } diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/ResourceBundleWrapper.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/ResourceBundleWrapper.java index 25204c2c614..d411075c8cf 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/ResourceBundleWrapper.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/ResourceBundleWrapper.java @@ -112,15 +112,7 @@ public class ResourceBundleWrapper extends UResourceBundle { protected static synchronized UResourceBundle instantiateBundle(String baseName, String localeID, ClassLoader root, boolean disableFallback) { if (root == null) { - root = Thread.currentThread().getContextClassLoader(); - if (root == null) { - root = ClassLoader.getSystemClassLoader(); - if (root == null) { - //TODO It is not guaranteed that we can get non-null class loader - // by the Java specification. - throw new RuntimeException("No accessible class loader is available for resource bundle " + baseName); - } - } + root = Utility.getFallbackClassLoader(); } final ClassLoader cl = root; String name = baseName; diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/URLHandler.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/URLHandler.java index bb182ae2ff4..17eb7ad55a2 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/URLHandler.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/URLHandler.java @@ -35,18 +35,10 @@ public abstract class URLHandler { try { InputStream is = URLHandler.class.getResourceAsStream(PROPNAME); if (is == null) { - ClassLoader loader = Thread.currentThread().getContextClassLoader(); - if (loader == null) { - loader = ClassLoader.getSystemClassLoader(); - if (loader == null) { - //TODO It is not guaranteed that we can get non-null class loader - // by the Java specification. - throw new RuntimeException("No accessible class loader is available for URLHandler"); - } - } + ClassLoader loader = Utility.getFallbackClassLoader(); is = loader.getResourceAsStream(PROPNAME); } - + if (is != null) { Class[] params = { URL.class }; BufferedReader br = new BufferedReader(new InputStreamReader(is)); diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/Utility.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/Utility.java index efe51451137..77b72362d3e 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/Utility.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/Utility.java @@ -1,6 +1,6 @@ /* ******************************************************************************* - * Copyright (C) 1996-2009, International Business Machines Corporation and * + * Copyright (C) 1996-2010, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -1829,4 +1829,21 @@ public final class Utility { } return buffer.toString(); } + + /** + * Return a fallback class loader for loading ICU resource + * @return A class loader + */ + public static ClassLoader getFallbackClassLoader() { + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + if (cl == null) { + cl = ClassLoader.getSystemClassLoader(); + if (cl == null) { + //TODO It is not guaranteed that we can get non-null class loader + // by the Java specification. + throw new RuntimeException("No accessible class loader is available."); + } + } + return cl; + } }