harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alexey Varlamov <alexey.v.varla...@gmail.com>
Subject Re: HDK ClassLoader behavior differs from RI
Date Thu, 06 Aug 2009 04:35:16 GMT
2009/8/5 Pavel Pervov <pmcfirst@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 <mohanraj.l@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
>>
>

Mime
View raw message