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

getSerialVersionUID() returns bad result or throws exception

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 1.4.0
    • 1.3.0
    • core-libs
    • beta2
    • generic
    • generic
    • Verified



      Name: ssT124754 Date: 03/28/2001


      java version "1.2.1"
      Solaris VM (build Solaris_JDK_1.2.1_04c, native threads, sunwjit)

      java version "1.3.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build Blackdown-1.3.0-FCS)
      Java HotSpot(TM) Client VM (build Blackdown-1.3.0-FCS, mixed mode)

      If I use other type than long for serialVersionUID, JDK 1.1 ignore this bad
      field and compute it. With JDK 1.2 and JDK 1.3, it use this bad field or
      throws exception.


      class SerialUIDInt
          implements java.io.Serializable
      {
          public static final int serialVersionUID = 0x0001;
          public static final byte trash2 = 0x22;
          public static final byte trash3 = 0x33;
      }

      class SerialUIDFloat
          implements java.io.Serializable
      {
          public static final float serialVersionUID = 0.1f;
          public static final byte trash2 = 0x22;
          public static final byte trash3 = 0x33;
      }

      class SerialUIDObject
          implements java.io.Serializable
      {
          public static final Long serialVersionUID = new Long(1L);
      }

      JDK 1.1 results

      $ /usr/java1.1/bin/serialver SerialUIDInt SerialUIDFloat SerialUIDObject
      SerialUIDInt: static final long serialVersionUID = -1509588532565688561L;
      SerialUIDFloat: static final long serialVersionUID = -7187539948674074587L;
      SerialUIDObject: static final long serialVersionUID = -2830734355633622104L;


      JDK 1.2 / JDK 1.3 results

      $ /usr/java1.2/bin/serialver SerialUIDInt
      SerialUIDInt: static final long serialVersionUID = 1L;

      $ /usr/java1.2/bin/serialver SerialUIDFloat
      Exception in thread "main" java.lang.IllegalArgumentException: field type
      mismatch
              at java.lang.reflect.Field.getLong(Native Method)
              at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:338)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:331)
              at java.io.ObjectStreamClass.lookupInternal(ObjectStreamClass.java:111)
              at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:59)
              at sun.tools.serialver.SerialVer.serialSyntax(SerialVer.java:156)
              at sun.tools.serialver.SerialVer.main(Compiled Code)

      $ /usr/java1.2/bin/serialver SerialUIDObject
      Exception in thread "main" java.lang.IllegalArgumentException
              at java.lang.reflect.Field.getLong(Native Method)
              at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:338)
              at java.security.AccessController.doPrivileged(Native Method)
              at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:331)
              at java.io.ObjectStreamClass.lookupInternal(ObjectStreamClass.java:111)
              at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:59)
              at sun.tools.serialver.SerialVer.serialSyntax(SerialVer.java:156)
              at sun.tools.serialver.SerialVer.main(Compiled Code)
      (Review ID: 119652)
      ======================================================================

            mwarressunw Michael Warres (Inactive)
            ssultanasunw Shaheen Sultana (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: