package test;
import java.lang.reflect.Method;
public class TreeNodeTester {
private static Class loadClass (String className, byte[] b) {
//override classDefine (as it is protected) and define the class.
Class clazz = null;
try {
ClassLoader loader = ClassLoader.getSystemClassLoader();
Class cls = Class.forName("java.lang.ClassLoader");
java.lang.reflect.Method method = cls.getDeclaredMethod("defineClass", new Class[] { String.class, byte[].class, int.class, int.class });
// protected method invocaton
method.setAccessible(true);
try {
Object[] args = new Object[] { className, b, new Integer(0), new Integer(b.length)};
clazz = (Class) method.invoke(loader, args);
} finally {
method.setAccessible(false);
}
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
return clazz;
}
public static void main(String[] args) throws Exception {
byte[] b = TreeNodeDump.dump();
Class<?> c = loadClass("TreeNode", b);
Method method = c.getMethod("main", String[].class);
method.invoke(null, new String[]{});
}
}