diff --git a/src/main/java/org/xerial/snappy/SnappyLoader.java b/src/main/java/org/xerial/snappy/SnappyLoader.java
index 2c31e5b..b5ee247 100755
--- a/src/main/java/org/xerial/snappy/SnappyLoader.java
+++ b/src/main/java/org/xerial/snappy/SnappyLoader.java
@@ -31,6 +31,7 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.lang.reflect.Method;
import java.net.URL;
import java.security.DigestInputStream;
import java.security.MessageDigest;
@@ -57,8 +58,8 @@ import java.util.Properties;
*
Folders specified by java.lib.path system property (This is the default
+ * path that JVM searches for native libraries)
*
*
*
@@ -109,7 +110,7 @@ public class SnappyLoader
if (!isInitialized) {
final String nativeLoaderClassName = "org.xerial.snappy.SnappyNativeLoader";
- final String[] preloadClass = new String[] { "org.xerial.snappy.SnappyNative",
+ final String[] classesToPreload = new String[] { "org.xerial.snappy.SnappyNative",
"org.xerial.snappy.SnappyErrorCode" };
try {
@@ -123,15 +124,15 @@ public class SnappyLoader
// Load a byte code
byte[] byteCode = getByteCode("/org/xerial/snappy/SnappyNativeLoader.bytecode");
// In addition, load the SnappyNative and SnappyException class in the system class loader
- List preloadClassByteCode = new ArrayList(preloadClass.length);
- for (String each : preloadClass) {
+ List preloadClassByteCode = new ArrayList(classesToPreload.length);
+ for (String each : classesToPreload) {
preloadClassByteCode.add(getByteCode(String.format("/%s.class", each.replaceAll("\\.", "/"))));
}
// Create a new class to the system class loader
Class< ? > classLoader = Class.forName("java.lang.ClassLoader");
- java.lang.reflect.Method defineClass = classLoader.getDeclaredMethod("defineClass", new Class[] {
- String.class, byte[].class, int.class, int.class, ProtectionDomain.class });
+ Method defineClass = classLoader.getDeclaredMethod("defineClass", new Class[] { String.class,
+ byte[].class, int.class, int.class, ProtectionDomain.class });
ClassLoader systemClassLoader = getSystemClassLoader();
defineClass.setAccessible(true);
@@ -140,9 +141,9 @@ public class SnappyLoader
defineClass.invoke(systemClassLoader, nativeLoaderClassName, byteCode, 0, byteCode.length,
System.class.getProtectionDomain());
- for (int i = 0; i < preloadClass.length; ++i) {
+ for (int i = 0; i < classesToPreload.length; ++i) {
byte[] b = preloadClassByteCode.get(i);
- defineClass.invoke(systemClassLoader, preloadClass[i], b, 0, b.length,
+ defineClass.invoke(systemClassLoader, classesToPreload[i], b, 0, b.length,
System.class.getProtectionDomain());
}
}
@@ -153,12 +154,11 @@ public class SnappyLoader
// Load the loader class
Class< ? > loaderClass = systemClassLoader.loadClass(nativeLoaderClassName);
if (loaderClass != null) {
- java.lang.reflect.Method loadMethod = loaderClass.getDeclaredMethod("load",
- new Class[] { String.class });
+ Method loadMethod = loaderClass.getDeclaredMethod("load", new Class[] { String.class });
File nativeLib = findNativeLibrary();
loadMethod.invoke(null, nativeLib.getAbsolutePath());
- for (String each : preloadClass) {
+ for (String each : classesToPreload) {
systemClassLoader.loadClass(each);
}
diff --git a/src/main/java/org/xerial/snappy/SnappyNative.java b/src/main/java/org/xerial/snappy/SnappyNative.java
index 42e0882..d97b3b3 100755
--- a/src/main/java/org/xerial/snappy/SnappyNative.java
+++ b/src/main/java/org/xerial/snappy/SnappyNative.java
@@ -28,7 +28,9 @@ import java.io.IOException;
import java.nio.ByteBuffer;
/**
- * Interface to access the native code of Snappy
+ * Interface to access the native code of Snappy. Although the methods in this
+ * class are public, do not use them.
+ *
*
* @author leo
*
@@ -67,7 +69,7 @@ public class SnappyNative
public native static boolean isValidCompressedBuffer(Object input, int offset, int len) throws IOException;
protected static void throw_error(int errorCode) throws IOException {
- throw new IOException(SnappyErrorCode.getErrorMessage(errorCode));
+ throw new IOException(String.format("%s(%d)", SnappyErrorCode.getErrorMessage(errorCode), errorCode));
}
}
diff --git a/src/test/java/org/xerial/snappy/SnappyLoaderTest.java b/src/test/java/org/xerial/snappy/SnappyLoaderTest.java
index dab9fb4..a47c302 100755
--- a/src/test/java/org/xerial/snappy/SnappyLoaderTest.java
+++ b/src/test/java/org/xerial/snappy/SnappyLoaderTest.java
@@ -89,17 +89,7 @@ public class SnappyLoaderTest
@Test
public void load() throws Exception {
- //SnappyLoader.load();
- // Class< ? > c1 = Class.forName("org.xerial.snappy.SnappyNative");
- // Class< ? > c2 = Class.forName("org.xerial.snappy.Snappy");
- // ClassLoader cl1 = c1.getClassLoader();
- // ClassLoader cl2 = c2.getClassLoader();
- // Method m = c1.getDeclaredMethod("nativeLibraryVersion");
- // m.setAccessible(true);
- // String version = (String) m.invoke(null);
- // _logger.info(version);
-
- //_logger.info(SnappyNative.nativeLibraryVersion());
- _logger.info(Snappy.getNativeLibraryVersion());
+ SnappyLoader.load();
+ _logger.debug(Snappy.getNativeLibraryVersion());
}
}
diff --git a/src/test/java/org/xerial/snappy/SnappyTest.java b/src/test/java/org/xerial/snappy/SnappyTest.java
index b60982e..1347c62 100755
--- a/src/test/java/org/xerial/snappy/SnappyTest.java
+++ b/src/test/java/org/xerial/snappy/SnappyTest.java
@@ -296,15 +296,9 @@ public class SnappyTest
fail("cannot reach here since the input is invalid data");
}
catch (IOException e) {
+ _logger.debug(e);
//assertEquals(SnappyErrorCode.FAILED_TO_UNCOMPRESS, e.errorCode);
}
- // catch (Exception e) {
- // Class< ? > c = e.getClass();
- // ClassLoader cl = c.getClassLoader();
- //
- // ClassLoader cl2 = SnappyException.class.getClassLoader();
- // _logger.error(e);
- // }
}