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

java.util.TreeMap can not be serialized

XMLWordPrintable

    • sparc
    • solaris_2.6



      Name: ooR10001 Date: 04/17/2000


      If java.util.TreeMap object created by constructor with java.util.Collator
      parameter, and parameter will not implements java.io.Serializable, the object is
      no longer serializable.
      Object's field 'comparator' is initialized with non-Serializable class
      instance of java.util.Comparator, which implements java.util.Collator.
      This is causing the problem.
       
      The test example to reproduce the bug:
      -------------------------------------------------------------
      import java.io.FileOutputStream;
      import java.io.ObjectOutputStream;

      public class test {

        public static void main(String[] args) {
          try {
              java.util.TreeMap obj =
                  new java.util.TreeMap(java.text.Collator.getInstance(
                          new java.util.Locale("en", "US", "")));

              FileOutputStream ostream = new FileOutputStream("gold.tmp");
              ObjectOutputStream objos = new ObjectOutputStream(ostream);
              objos.writeObject(obj);
              objos.close();

          } catch (java.io.IOException e) {
              e.printStackTrace();
          }
        }

      }
      -------------------------------------------------------------
      Test output:

      java.io.NotSerializableException: java.text.RuleBasedCollator
              at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1148)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366)
              at
      java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java:1841)
              at
      java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:480)
              at java.util.TreeMap.writeObject(TreeMap.java:1491)
              at java.lang.reflect.Method.invoke(Native Method)
              at
      java.io.ObjectOutputStream.invokeObjectWriter(ObjectOutputStream.java:1878)
              at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1210)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366)
              at test.main(test.java:14)
      -------------------------------------------------------------

      ======================================================================

            nlindenbsunw Norbert Lindenberg (Inactive)
            oovsunw Oov Oov (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: