United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-7080038 (ann) Serializable types in sun.reflect.annotation do not declare serialVersionUIDs
JDK-7080038 : (ann) Serializable types in sun.reflect.annotation do not declare serialVersionUIDs

Details
Type:
Bug
Submit Date:
2011-08-17
Status:
Closed
Updated Date:
2012-09-28
Project Name:
JDK
Resolved Date:
2012-05-17
Component:
core-libs
OS:
generic
Sub-Component:
java.lang:reflect
CPU:
generic
Priority:
P2
Resolution:
Fixed
Affected Versions:
8
Fixed Versions:

Related Reports
Backport:
Relates:
Relates:
Relates:

Sub Tasks

Description
The serializable types in sun.reflect.annotation.* used to persist annotation objects do not declare serialVersionUIDs, making the classes suspectible to compatability problems when those classes are edited.

                                    

Comments
SUGGESTED FIX

Add JDK 5-era serialVersionUIDs to the types in question:

diff --git a/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java b/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java
--- a/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java
+++ b/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
@@ -40,6 +40,7 @@
 * @since   1.5
 */
class AnnotationInvocationHandler implements InvocationHandler, Serializable {
+    private static final long serialVersionUID = 6182022883658399397L;
    private final Class<? extends Annotation> type;
    private final Map<String, Object> memberValues;

diff --git a/src/share/classes/sun/reflect/annotation/AnnotationTypeMismatchExceptionProxy.java b/src/share/classes/sun/reflect/annotation/AnnotationTypeMismatchExceptionProxy.java
--- a/src/share/classes/sun/reflect/annotation/AnnotationTypeMismatchExceptionProxy.java
+++ b/src/share/classes/sun/reflect/annotation/AnnotationTypeMismatchExceptionProxy.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
@@ -34,6 +34,7 @@
 * @since   1.5
 */
class AnnotationTypeMismatchExceptionProxy extends ExceptionProxy {
+    private static final long serialVersionUID = 7844069490309503934L;
    private Method member;
    private String foundType;

diff --git a/src/share/classes/sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java b/src/share/classes/sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java
--- a/src/share/classes/sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java
+++ b/src/share/classes/sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
@@ -33,6 +33,7 @@
 * @since   1.5
 */
public class EnumConstantNotPresentExceptionProxy extends ExceptionProxy {
+    private static final long serialVersionUID = -604662101303187330L;
    Class<? extends Enum> enumType;
    String constName;

diff --git a/src/share/classes/sun/reflect/annotation/TypeNotPresentExceptionProxy.java b/src/share/classes/sun/reflect/annotation/TypeNotPresentExceptionProxy.java
--- a/src/share/classes/sun/reflect/annotation/TypeNotPresentExceptionProxy.java
+++ b/src/share/classes/sun/reflect/annotation/TypeNotPresentExceptionProxy.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
@@ -33,6 +33,7 @@
 * @since   1.5
 */
public class TypeNotPresentExceptionProxy extends ExceptionProxy {
+    private static final long serialVersionUID = 5565925172427947573L;
    String typeName;
    Throwable cause;
                                     
2011-08-17
EVALUATION

A fine idea.
                                     
2011-08-17
PUBLIC COMMENTS

See
http://hg.openjdk.java.net/jdk8/tl/jdk/rev/71e353aba896
                                     
2011-08-23



Hardware and Software, Engineered to Work Together