harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vasily Zakharov (JIRA)" <j...@apache.org>
Subject [jira] Updated: (HARMONY-5086) [drlvm][kernel][geronimo] AnnotatedElement.getDeclaredAnnotations() throws exception if annotation is not available
Date Wed, 07 Nov 2007 23:37:51 GMT

     [ https://issues.apache.org/jira/browse/HARMONY-5086?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Vasily Zakharov updated HARMONY-5086:
-------------------------------------

    Description: 
When AccessibleObject.getDeclaredAnnotations() is called and the annotation class to be returned
cannot be loaded, RI just skips that annotation, and Harmony throws exception.
To reproduce, use the following code:

import java.lang.annotation.*;
import java.lang.reflect.*;
import java.net.*;
public class Test {
    public static void main(String[] args) {
        try {
            Class cls = Foo.class;
            Field field = cls.getDeclaredFields()[0];
            Constructor constructor = cls.getDeclaredConstructors()[0];
            Method method = cls.getDeclaredMethods()[0];
            int can = cls.getDeclaredAnnotations().length;
            int fan = field.getDeclaredAnnotations().length;
            int nan = constructor.getDeclaredAnnotations().length;
            int man = method.getDeclaredAnnotations().length;
            System.out.println("SUCCESS: " + can + " " + fan + " " + nan + " " + man);
        } catch (Exception e) {
            e.printStackTrace(System.out);
        }
    }
}

@Retention(RetentionPolicy.RUNTIME)
@interface Ann {}

@Ann class Foo {
    @Ann int field;
    @Ann Foo() {}
    @Ann void method() {}
}

If the test is run normally, both RI and Harmony produce the same result, but if Ann.class
file is REMOVED, the output becomes different.

Output on RI and Harmony with Ann.class present:

SUCCESS: 1 1 1

Output on RI with Ann.class removed:

SUCCESS: 0 0 0

Output on Harmony with Ann.class removed:

java.lang.TypeNotPresentException: Type Ann not present
        at org.apache.harmony.vm.VMGenericsAndAnnotations.getDeclaredAnnotations(VMGenericsAndAnnotations.java)
        at java.lang.reflect.Field$FieldData.getAnnotations(Field.java:457)
        at java.lang.reflect.Field.getDeclaredAnnotations(Field.java:42)
        at Test.main(Test.java:11)
Caused by: java.lang.NoClassDefFoundError: Ann
        at org.apache.harmony.vm.VMGenericsAndAnnotations.getDeclaredAnnotations(VMGenericsAndAnnotations.java)
        ... 3 more
Caused by: java.lang.ClassNotFoundException: Ann
        at java.net.URLClassLoader.findClass(URLClassLoader.java:894)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:575)
        at java.lang.ClassLoader$SystemClassLoader.loadClass(ClassLoader.java:963)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
        at org.apache.harmony.vm.VMGenericsAndAnnotations.getDeclaredAnnotations(VMGenericsAndAnnotations.java)
        ... 3 more

This issue prevents Apache Geronimo 2.0 from starting on Harmony. 


  was:
When AccessibleObject.getDeclaredAnnotations() is called and the annotation class to be returned
cannot be loaded, RI just skips that annotation, and Harmony throws exception.
To reproduce, use the following code:

import java.lang.annotation.*;
import java.lang.reflect.*;
import java.net.*;
public class Test {
    public static void main(String[] args) {
        try {
            Class cls = Foo.class;
            Field field = cls.getDeclaredFields()[0];
            Constructor constructor = cls.getDeclaredConstructors()[0];
            Method method = cls.getDeclaredMethods()[0];
            int fan = field.getDeclaredAnnotations().length;
            int can = constructor.getDeclaredAnnotations().length;
            int man = method.getDeclaredAnnotations().length;
            System.out.println("SUCCESS: " + fan + " " + can + " " + man);
        } catch (Exception e) {
            e.printStackTrace(System.out);
        }
    }
}

@Retention(RetentionPolicy.RUNTIME)
@interface Ann {}

class Foo {
    @Ann int field;
    @Ann Foo() {}
    @Ann void method() {}
}

If the test is run normally, both RI and Harmony produce the same result, but if Ann.class
file is REMOVED, the output becomes different.

Output on RI and Harmony with Ann.class present:

SUCCESS: 1 1 1

Output on RI with Ann.class removed:

SUCCESS: 0 0 0

Output on Harmony with Ann.class removed:

java.lang.TypeNotPresentException: Type Ann not present
        at org.apache.harmony.vm.VMGenericsAndAnnotations.getDeclaredAnnotations(VMGenericsAndAnnotations.java)
        at java.lang.reflect.Field$FieldData.getAnnotations(Field.java:457)
        at java.lang.reflect.Field.getDeclaredAnnotations(Field.java:42)
        at Test.main(Test.java:11)
Caused by: java.lang.NoClassDefFoundError: Ann
        at org.apache.harmony.vm.VMGenericsAndAnnotations.getDeclaredAnnotations(VMGenericsAndAnnotations.java)
        ... 3 more
Caused by: java.lang.ClassNotFoundException: Ann
        at java.net.URLClassLoader.findClass(URLClassLoader.java:894)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:575)
        at java.lang.ClassLoader$SystemClassLoader.loadClass(ClassLoader.java:963)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
        at org.apache.harmony.vm.VMGenericsAndAnnotations.getDeclaredAnnotations(VMGenericsAndAnnotations.java)
        ... 3 more

This issue prevents Apache Geronimo 2.0 from starting on Harmony. 



> [drlvm][kernel][geronimo] AnnotatedElement.getDeclaredAnnotations() throws exception
if annotation is not available
> -------------------------------------------------------------------------------------------------------------------
>
>                 Key: HARMONY-5086
>                 URL: https://issues.apache.org/jira/browse/HARMONY-5086
>             Project: Harmony
>          Issue Type: Bug
>          Components: App-Oriented Bug Reports, DRLVM
>            Reporter: Vasily Zakharov
>            Priority: Critical
>
> When AccessibleObject.getDeclaredAnnotations() is called and the annotation class to
be returned cannot be loaded, RI just skips that annotation, and Harmony throws exception.
> To reproduce, use the following code:
> import java.lang.annotation.*;
> import java.lang.reflect.*;
> import java.net.*;
> public class Test {
>     public static void main(String[] args) {
>         try {
>             Class cls = Foo.class;
>             Field field = cls.getDeclaredFields()[0];
>             Constructor constructor = cls.getDeclaredConstructors()[0];
>             Method method = cls.getDeclaredMethods()[0];
>             int can = cls.getDeclaredAnnotations().length;
>             int fan = field.getDeclaredAnnotations().length;
>             int nan = constructor.getDeclaredAnnotations().length;
>             int man = method.getDeclaredAnnotations().length;
>             System.out.println("SUCCESS: " + can + " " + fan + " " + nan + " " + man);
>         } catch (Exception e) {
>             e.printStackTrace(System.out);
>         }
>     }
> }
> @Retention(RetentionPolicy.RUNTIME)
> @interface Ann {}
> @Ann class Foo {
>     @Ann int field;
>     @Ann Foo() {}
>     @Ann void method() {}
> }
> If the test is run normally, both RI and Harmony produce the same result, but if Ann.class
file is REMOVED, the output becomes different.
> Output on RI and Harmony with Ann.class present:
> SUCCESS: 1 1 1
> Output on RI with Ann.class removed:
> SUCCESS: 0 0 0
> Output on Harmony with Ann.class removed:
> java.lang.TypeNotPresentException: Type Ann not present
>         at org.apache.harmony.vm.VMGenericsAndAnnotations.getDeclaredAnnotations(VMGenericsAndAnnotations.java)
>         at java.lang.reflect.Field$FieldData.getAnnotations(Field.java:457)
>         at java.lang.reflect.Field.getDeclaredAnnotations(Field.java:42)
>         at Test.main(Test.java:11)
> Caused by: java.lang.NoClassDefFoundError: Ann
>         at org.apache.harmony.vm.VMGenericsAndAnnotations.getDeclaredAnnotations(VMGenericsAndAnnotations.java)
>         ... 3 more
> Caused by: java.lang.ClassNotFoundException: Ann
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:894)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:575)
>         at java.lang.ClassLoader$SystemClassLoader.loadClass(ClassLoader.java:963)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
>         at org.apache.harmony.vm.VMGenericsAndAnnotations.getDeclaredAnnotations(VMGenericsAndAnnotations.java)
>         ... 3 more
> This issue prevents Apache Geronimo 2.0 from starting on Harmony. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message