Menu

#729 transient listeners in serializable result in NPE

3.0.0
closed
nobody
None
5
2007-12-07
2007-11-16
max g
No

Hi,

org.zkoss.zul.AbstractTreeModel implements java.io.Serializable

it also has

private transient List _listeners = new LinkedList();

The problem is that transient fields don't get restored after serialization. This results in NullPointerException when the serialized class is restored and

public void addTreeDataListener(TreeDataListener l){
_listeners.add(l);
}

or

public void removeTreeDataListener(TreeDataListener l){
_listeners.remove(l);
}

is called. Because _listeners = null .

I would propose to see at least

public void addTreeDataListener(TreeDataListener l){
if(_listeners != null)
_listeners.add(l);
}

or better

public void addTreeDataListener(TreeDataListener l){
if(_listeners == null)
_listeners = new LinkedList();
_listeners.add(l);
}

or anything you like better.

thx a lot for your great work!

cheers

Discussion

  • Tom M. Yeh

    Tom M. Yeh - 2007-12-07

    Logged In: YES
    user_id=91099
    Originator: NO

    Fixed since 12/7
    --
    Thanks for your suggestion. However, it is better to keep up with AbstractListModel: serialize listeners if they are serializable. In other words, it is the job of the developer who implements the listener.

     
  • Tom M. Yeh

    Tom M. Yeh - 2007-12-07
    • milestone: --> 3.0.0
    • status: open --> closed
     

Log in to post a comment.