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

Regression: Deserialization can throw ClassNotFoundException from ClassLoader

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P2 P2
    • 1.4.0
    • solaris_9, 1.0, 1.4.0
    • core-libs
    • beta
    • generic, x86, sparc
    • solaris_8, windows_nt
    • Verified

      This bug was originally detected by the failing test case
      test/java/awt/dnd/DnDAcceptanceTest. We have created a new test case which does
      not involve DnD.

      import java.applet.Applet;
      import java.awt.Button;
      import java.awt.event.MouseAdapter;
      import java.io.*;

      public class DnDAcceptanceTest extends Applet {
          public static void main(String[] args) {
              final Button src = new Button();
              src.addMouseListener(new Adapter());
              testSer(src);
          }

          public void init() {
              final Button src = new Button();
              src.addMouseListener(new Adapter());
              testSer(src);
          }

          public static void testSer(Object o) {
              try {
                  ByteArrayOutputStream baos = new ByteArrayOutputStream();
                  ObjectOutputStream oos = new ObjectOutputStream(baos);
                  oos.writeObject(o);
                  ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
                  ObjectInputStream ois = new ObjectInputStream(bais);
                  Object copy = ois.readObject();
                  System.err.println("copy=" + copy);
              } catch (Throwable ex) {
                  ex.printStackTrace();
              }
          }
      }

      class Adapter extends MouseAdapter implements Serializable {}



      This test passes when run as a standalone application.
      However if you run this test in appletviewer deserialization will fail
      with exception:

      java.lang.ClassNotFoundException: Adapter
              at java.lang.ClassLoader.findClass(ClassLoader.java:355)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:259)
              at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
              at java.lang.Class.forName0(Native Method)
              at java.lang.Class.forName(Class.java:195)
              at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:489)
              at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1365)
              at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1288)
              at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1489)
              at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1161)
              at java.io.ObjectInputStream.readObject(ObjectInputStream.java:283)
              at java.awt.Component.readObject(Component.java:6528)
              at sun.misc.Unsafe.invokeSpecial(Native Method)
              at sun.misc.ClassReflector.invokeSpecial(ClassReflector.java:376)
              at $ClassReflector1.readObject(Unknown Source)
              at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1585)
              at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1508)
              at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1161)
              at java.io.ObjectInputStream.readObject(ObjectInputStream.java:283)
              at DnDAcceptanceTest.testSer(DnDAcceptanceTest.java:26)
              at DnDAcceptanceTest.init(DnDAcceptanceTest.java:16)
              at sun.applet.AppletPanel.run(AppletPanel.java:344)
              at java.lang.Thread.run(Thread.java:579)

      This failure is reproducible on builds b46-b50 and not reproducible on
      b40. I'm not sure whether this is a ClassLoader bug or a Serialization bug.
      Filing bug based on stack trace for now.

            mwarressunw Michael Warres (Inactive)
            dmendenhsunw David Mendenhall (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: