-
Bug
-
Resolution: Fixed
-
P3
-
1.4.0
-
beta2
-
sparc
-
solaris_2.6
Name: dsR10051 Date: 04/09/2001
Method
protected void writeObject(Object o) of class java.beans.XMLEncoder
does not write java.awt.MenuShortcut object to the output stream.
Here is minimized test:
import java.io.*;
import java.beans.*;
import java.awt.*;
public class Test0012 {
public static void main(String[] args) {
MenuShortcut object = new MenuShortcut(java.awt.event.KeyEvent.VK_1, true);
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());
MenuShortcut res = (MenuShortcut) xmlDec.readObject();
if(res.equals(object)) {
System.out.println("OKAY");
} else {
System.out.println("Failed");
System.out.println("MenuShortcut: " + res);
System.out.println("Expected : " + object);
}
}
}
--- output ---
%java -version
java version "1.4.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta-b58)
Java HotSpot(TM) Client VM (build 1.4.0-beta-b58, mixed mode)
%java Test0012
Warning:
Cannot allocate colormap entry for default background
java.lang.InstantiationException: java.awt.MenuShortcut
Continuing ...
java.lang.Exception: discarding statement XMLEncoder0.writeObject(MenuShortcut0);
Continuing ...
OutputStream
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.4.0-beta" class="java.beans.XMLDecoder">
</java>
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at java.beans.ObjectHandler.dequeueResult(XMLDecoder.java:270)
at java.beans.XMLDecoder.readObject(XMLDecoder.java:148)
at Test0012.main(Test0012.java:22)
======================================================================
Name: dsR10051 Date: 04/09/2001
Besides, method ignores the MenuShortcut property
of java.awt.MenuItem object when it writes MenuItem. Example:
import java.io.*;
import java.beans.*;
import java.awt.*;
public class Test0014 {
public static void main(String[] args) {
MenuItem object = new MenuItem("Label");
MenuShortcut ms = new MenuShortcut(java.awt.event.KeyEvent.VK_1, true);
object.setShortcut(ms);
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());
MenuItem res = (MenuItem) xmlDec.readObject();
if(res.getShortcut().equals(ms)) {
System.out.println("OKAY");
} else {
System.out.println("Failed");
System.out.println("MenuItem: " + res);
System.out.println("Expected: " + object);
}
}
}
--- output ---
%java Test0014
Warning:
Cannot allocate colormap entry for default background
java.lang.InstantiationException: java.awt.MenuShortcut
Continuing ...
java.lang.RuntimeException: failed to evaluate: <unbound>=MenuShortcut.new();
Continuing ...
OutputStream
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.4.0-beta" class="java.beans.XMLDecoder">
<object class="java.awt.MenuItem">
<void property="actionCommand">
<string>Label</string>
</void>
<void property="label">
<string>Label</string>
</void>
<void property="name">
<string>menuitem0</string>
</void>
</object>
</java>
Exception in thread "main" java.lang.NullPointerException
at Test0014.main(Test0014.java:25)
======================================================================