2009/8/5 Pavel Pervov <pmcfi...@gmail.com>: > Ah. I've misread your original post. > Harmony VM attempts to load outer class on some stage of processing > inner class. This is not neccessary classloading issue. It may be > reflection itself.
Looking at the stack trace, it is indeed: java.lang.NoClassDefFoundError: junit/framework/TestCase [...] at java.lang.ClassLoader.loadClass(ClassLoader.java:319) at java.lang.VMClassRegistry.getEnclosingClass(VMClassRegistry.java) at java.lang.Class.getEnclosingClass(Class.java:1065) at java.lang.reflect.ReflectExporter.hasSameTopLevelClass(ReflectExporter.java:176) at java.lang.reflect.ReflectExporter.allowAccess(ReflectExporter.java:103) at java.lang.reflect.ReflectExporter.checkMemberAccess(ReflectExporter.java:86) at java.lang.reflect.Method.invoke(Method.java:311) at ClassLoadTest.callMain(ClassLoadTest.java:9) at ClassLoadTest.main(ClassLoadTest.java:13) It should be possible to add a workaround here, please file this issue to JIRA. -- Regards, Alexey > > 2009/8/5, Mohanraj Loganathan <mohanra...@gmail.com>: >> I am getting the different output with HDK and RI with the following >> scenario >> >> Step1: Compile TestInnerClass.java [1] by including junit.jar in the >> classpath. >> Step2: Through reflection call the innerclass >> TestInnerClass$ExceptingEntryPoint main method (refer [2]) without >> including the junit.jar in the classpath >> >> HDK: throws NoClassDefFoundError: junit/framework/TestCase >> RI: prints "I am printing from TestInnerClass$ExceptingEntryPoint" >> >> Any thougts on this. >> >> P.S: One of the ANT unit-testcase implements this scenario due to which 4 >> tests are failing. >> >> [1] TestInnerClass .java >> >> import junit.framework.TestCase; >> public class TestInnerClass extends TestCase{ >> public static class ExceptingEntryPoint { >> public static void main(String[] argv) { >> System.out.println("I am printing from >> TestInnerClass$ExceptingEntryPoint"); >> } >> } >> } >> >> >> [2] Testcase: ClassLoadTest.java >> >> import java.lang.reflect.Method; >> public class ClassLoadTest { >> public void callMain() throws Exception{ >> String classname = "TestInnerClass$ExceptingEntryPoint"; >> Class target = Class.forName(classname, true, >> this.getClass().getClassLoader()); >> Method main = target.getMethod("main", new Class[] >> {String[].class}); >> main.invoke(null, (Object[])new String[] {null}); >> } >> >> public static void main(String[] args) throws Exception{ >> new ClassLoadTest().callMain(); >> } >> } >> >> Thanks and Regards, >> Mohan >> >