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

XMLEncoder.writeObject does not write java.awt.MenuBar correcty.

XMLWordPrintable

    • beta3
    • sparc
    • solaris_2.6



      Name: dsR10051 Date: 09/18/2001


      The method of class java.beans.XMLEncoder
      protected void writeObject(Object o)
      does not write the java.awt.MenuBar object correctly to the output stream.
      It ignores the added menus of the MenuBar.

      Here is minimized test:
      import java.io.*;
      import java.beans.*;
      import java.awt.*;

      public class Test0015_01 {

          public static void main(String[] args) {

              MenuBar object = new MenuBar();
              Menu menu = new Menu("Label");
              MenuItem mi = new MenuItem("MenuItem Label");
              menu.add(mi);
              object.add(menu);

              ByteArrayOutputStream os = new ByteArrayOutputStream();
              XMLEncoder xmlEnc = new XMLEncoder(os);
              xmlEnc.writeObject(object);
              xmlEnc.flush();
              xmlEnc.close();

              ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
              XMLDecoder xmlDec = new XMLDecoder(in);
              System.out.println("OutputStream");
              System.out.println(os.toString());

              MenuBar res = (MenuBar) xmlDec.readObject();
              Menu res_menu = res.getMenu(0);
              if(res_menu.getLabel().equals("Label") &&
                      res_menu.getItem(0).getLabel().equals("MenuItem Label")) {
                  System.out.println("OKAY");
              } else {
                  System.out.println("Failed");
                  System.out.println("MenuBar : " + res);
                  System.out.println("Expected: " + object);
              }
          }
      }

      --- Output ---
      $ /set/jdk-builds/JDK1.4.0beta2-b78/solaris/bin/java Test0015_01
      OutputStream
      <?xml version="1.0" encoding="UTF-8"?>
      <java version="1.4.0-beta3" class="java.beans.XMLDecoder">
       <object class="java.awt.MenuBar">
        <void property="name">
         <string>menubar0</string>
        </void>
       </object>
      </java>

      Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
              at java.util.Vector.elementAt(Vector.java:422)
              at java.awt.MenuBar.getMenuImpl(MenuBar.java:281)
              at java.awt.MenuBar.getMenu(MenuBar.java:273)
              at Test0015_01.main(Test0015_01.java:27)
      $

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

            mdavidsosunw Mark Davidson (Inactive)
            sdasunw Sda Sda (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: