From 4a7694e295d0349e3948a7aa6b59e6a505b8f773 Mon Sep 17 00:00:00 2001 From: "Taro L. Saito" Date: Fri, 24 Jun 2011 14:23:01 +0900 Subject: [PATCH] Traverse ancestor class loader --- src/main/java/org/xerial/snappy/SnappyLoader.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/xerial/snappy/SnappyLoader.java b/src/main/java/org/xerial/snappy/SnappyLoader.java index f2e574e..d00f993 100755 --- a/src/main/java/org/xerial/snappy/SnappyLoader.java +++ b/src/main/java/org/xerial/snappy/SnappyLoader.java @@ -84,6 +84,14 @@ public class SnappyLoader private static boolean isInitialized = false; private static boolean isLoaded = false; + private static ClassLoader getAncestorClassLoader() { + ClassLoader cl = SnappyLoader.class.getClassLoader(); + while (cl.getParent() != null) { + cl = cl.getParent(); + } + return cl; + } + private static byte[] getByteCode(String resourcePath) throws IOException { InputStream in = SnappyLoader.class.getResourceAsStream(resourcePath); @@ -134,7 +142,7 @@ public class SnappyLoader Method defineClass = classLoader.getDeclaredMethod("defineClass", new Class[] { String.class, byte[].class, int.class, int.class, ProtectionDomain.class }); - ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); + ClassLoader systemClassLoader = getAncestorClassLoader(); // ClassLoader.defineClass is a protected method, so we have to make it accessible defineClass.setAccessible(true); try {