Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-7183985

(ann) Class.getAnnotation() throws an ArrayStoreException when the annotation class not present

    Details

    • Subcomponent:
    • Resolved In Build:
      b19
    • CPU:
      generic, x86
    • OS:
      generic, windows_7

      Description

      SYNOPSIS
      --------
      Class.getAnnotation() throws an ArrayStoreException when the annotation class is not present in the classpath

      OPERATING SYSTEM
      ----------------
      All (tested on Windows and Solaris)

      FULL JDK VERSION
      ----------------
      JDK 5 and greater, including JDK 8
      Note: The ArrayStoreException begin with 5.0u6 (See CR 6322301 fix).

      PROBLEM DESCRIPTION from LICENSEE
      ---------------------------------
      A call to Class.getAnnotation() throws the following java.lang.ArrayStoreException when an annotation's Class is not present on the classpath. The following stack is from JDK8-b39:

      Exception in thread "main" java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
              at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:677)
              at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:484)
              at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:308)
              at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:242)
              at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:88)
              at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:70)
              at java.lang.Class.initAnnotationsIfNecessary(Class.java:3093)
              at java.lang.Class.getAnnotation(Class.java:3052)
              at AnnotationTest.doTest(AnnotationTest.java:9)
              at AnnotationTest.main(AnnotationTest.java:5)

      The API specification for java.lang.Class states that Class.getAnnotation() returns this element's annotation for the specified type if such an annotation is present, else null. ArrayStoreException is not a checked Exception so it doesn't have to be declared, but it effectively prevents the API from following the specification - either the annotation should be returned, or null. Currently neither happens.

      The application could catch the ArrayStoreException and handle it, but Licensee prefers it to be dealt with in the JDK's internal implementation.

      TESTCASE AND REPRODUCTION INSTRUCTIONS
      --------------------------------------
      Attached

      WORKAROUND
      ----------
      Catch the undocumented ArrayStoreException and handle it.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                cushon Liam Miller-Cushon
                Reporter:
                dkorbel David Korbel (Inactive)
              • Votes:
                0 Vote for this issue
                Watchers:
                12 Start watching this issue

                Dates

                • Due:
                  Created:
                  Updated:
                  Resolved:
                  Imported:
                  Indexed: