Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / JavaBeans / June 2004

Tip: Looking for answers? Try searching our database.

XMLEncoder problems

Thread view: 
netpro2k - 28 Jan 2004 01:04 GMT
I am working on a form editor for a database system. The Form editor
works by allowing the user to add components to a "designPane" that
extends JPanel. After editing the form is saved using an XMLEncoder to
write the entire designPane to XML. This has worked fine up until now.
Ive created a custom component called "DBJCheckedListbox" that extends
Jlist. The error occurs when XMLEncoder tries to encode the
designPane. The relevant stack trace is:

java.lang.Exception: discarding statement
DesignPane0.add(DBJCheckedListbox0);
    at java.beans.XMLEncoder.writeStatement(XMLEncoder.java:339)
    at java.beans.DefaultPersistenceDelegate.invokeStatement(DefaultPersistenceDelegate.java:242)
    at java.beans.java_awt_Container_PersistenceDelegate.initialize(MetaData.java:400)
    at java.beans.PersistenceDelegate.initialize(PersistenceDelegate.java:191)
    at java.beans.DefaultPersistenceDelegate.initialize(DefaultPersistenceDelegate.java:393)
    at java.beans.javax_swing_JComponent_PersistenceDelegate.initialize(MetaData.java:587)
    at java.beans.PersistenceDelegate.initialize(PersistenceDelegate.java:191)
    at java.beans.DefaultPersistenceDelegate.initialize(DefaultPersistenceDelegate.java:393)
    at java.beans.PersistenceDelegate.initialize(PersistenceDelegate.java:191)
    at java.beans.DefaultPersistenceDelegate.initialize(DefaultPersistenceDelegate.java:393)
    at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:103)
    at java.beans.Encoder.writeObject(Encoder.java:55)
    at java.beans.XMLEncoder.writeObject(XMLEncoder.java:250)
    at java.beans.Encoder.writeExpression(Encoder.java:260)
    at java.beans.XMLEncoder.writeExpression(XMLEncoder.java:363)
    at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:100)
    at java.beans.Encoder.writeObject(Encoder.java:55)
    at java.beans.XMLEncoder.writeObject(XMLEncoder.java:250)
    at java.beans.Encoder.writeObject1(Encoder.java:192)
    at java.beans.Encoder.cloneStatement(Encoder.java:205)
    at java.beans.Encoder.writeStatement(Encoder.java:236)
    at java.beans.XMLEncoder.writeStatement(XMLEncoder.java:326)
    at java.beans.XMLEncoder.writeObject(XMLEncoder.java:253)
    at com.summationtech.symmetry.client.Modules.browser.FormEditor.DesignPane.save(DesignPane.java:133)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at com.demmegod.Thread.ReflectionThread.run(ReflectionThread.java:101)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
    at java.beans.DefaultPersistenceDelegate.initBean(DefaultPersistenceDelegate.java:340)
    at java.beans.DefaultPersistenceDelegate.initialize(DefaultPersistenceDelegate.java:395)
    at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:103)
    at java.beans.Encoder.writeObject(Encoder.java:55)
    at java.beans.XMLEncoder.writeObject(XMLEncoder.java:250)
    at java.beans.Encoder.writeExpression(Encoder.java:260)
    at java.beans.XMLEncoder.writeExpression(XMLEncoder.java:363)
    at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:100)
    at java.beans.Encoder.writeObject(Encoder.java:55)
    at java.beans.XMLEncoder.writeObject(XMLEncoder.java:250)
    at java.beans.Encoder.writeObject1(Encoder.java:192)
    at java.beans.Encoder.cloneStatement(Encoder.java:205)
    at java.beans.Encoder.writeStatement(Encoder.java:236)
    at java.beans.XMLEncoder.writeStatement(XMLEncoder.java:326)
    ... 28 more

Oddly enough this doesn't happen all the time but i haven't been able
to figure out why. Any ideas on what would make this happen?

The API for the DBJCheckedListbox class is as follows (I don't see how
this would help much, but cant hurt)

public class DBJCheckedListbox extends JList implements
symmDBJComponent, MouseListener
   private boolean live = false;
   private String relation;
   private exceptionDispatcher ExceptionDispatcher;
   private node relationBase;
   private checkListModel mdl;
   private checkBoxListCellRenderer cellRend;

   public DBJCheckedListbox()
   public DBJCheckedListbox(boolean live)
   public void enableEditing()
   public void disableEditing()
   public void reload()
   public void saveData()
   public void setNode(node Node)
   public void setNode(long nodeID)
   public void load()
   public node getNode()
   public void setExceptionDispatcher(exceptionDispatcher eD)
   public exceptionDispatcher getExceptionDispatcher()
   public String getComponentName()
   public void deleteNode()
   public void setJSScriptable(Scriptable scope)
   public void setObjectTypeEditable(boolean b)
   public void setRelationBase(node baseNode)
   public void setRelationBase(long baseNodeID)
   public void setRelationObject(String relatedName)
   public String getRelationObject()
   public int getDataType()
   public boolean isLive()
   public void setLive(boolean live)
   private void postException(Exception e)
   public void mouseClicked(MouseEvent e)
   public void mouseEntered(MouseEvent e)
   public void mouseExited(MouseEvent e)
   public void mousePressed(MouseEvent e)
   public void mouseReleased(MouseEvent e)

Thanks in advance.
LeeMeador - 04 Jun 2004 00:15 GMT
The problem may be that you sometimes a class is not considered to be bean
if there are more than one setter with the same name. Some code cares.
Some doesn't.

In your class you have these methods:

public void setNode(node Node)
public void setNode(long nodeID)
public node getNode()

The XML encoder may be having trouble deciding if the 'node' property is a
long or a node. There may be similar problems on other attributes.

The solution is to have a single setter and a single getter for each
property and the argument on the setter must match the return from the
getter as to type.

I would rename the 'setNode(long)' method to be 'setNodeAsLong()' knowing
as little as I do about what your code does.

I hope this helps.


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.