]> source.dussan.org Git - poi.git/commitdiff
Bug 56550: Defer the initialization of the _classes to when it is actually needed...
authorDominik Stadler <centic@apache.org>
Mon, 22 Dec 2014 12:38:44 +0000 (12:38 +0000)
committerDominik Stadler <centic@apache.org>
Mon, 22 Dec 2014 12:38:44 +0000 (12:38 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1647302 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/util/OOXMLLite.java

index 64920225aed3393da41ed140754d496946283027..4cbfdbdf3cd693f5bd8d517e15f765ec0e764f7e 100644 (file)
@@ -47,16 +47,7 @@ import org.junit.runner.Result;
  * @author Yegor Kozlov
  */
 public final class OOXMLLite {
-
-    private static final Field _classes;
-    static {
-        try {
-            _classes = ClassLoader.class.getDeclaredField("classes");
-            _classes.setAccessible(true);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
+    private static Field _classes;
 
     /**
      * Destination directory to copy filtered classes
@@ -206,6 +197,16 @@ public final class OOXMLLite {
      */
     @SuppressWarnings("unchecked")
     private static Map<String, Class<?>> getLoadedClasses(String ptrn) {
+        // make the field accessible, we defer this from static initialization to here to 
+        // allow JDKs which do not have this field (e.g. IBM JDK) to at least load the class
+        // without failing, see https://issues.apache.org/bugzilla/show_bug.cgi?id=56550
+        try {
+            _classes = ClassLoader.class.getDeclaredField("classes");
+            _classes.setAccessible(true);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
         ClassLoader appLoader = ClassLoader.getSystemClassLoader();
         try {
             Vector<Class<?>> classes = (Vector<Class<?>>) _classes.get(appLoader);