2009/8/5 Pavel Pervov <[email protected]>:
> 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 <[email protected]>:
>> 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
>>
>