You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Igor Vaynberg (JIRA)" <ji...@apache.org> on 2009/04/25 21:31:30 UTC

[jira] Assigned: (WICKET-2178) IllegalStateException Thrown when removing a node from org.apache.wicket.extensions.markup.html.tree.Tree

     [ https://issues.apache.org/jira/browse/WICKET-2178?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Igor Vaynberg reassigned WICKET-2178:
-------------------------------------

    Assignee: Matej Knopp

> IllegalStateException Thrown when removing a node from org.apache.wicket.extensions.markup.html.tree.Tree
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: WICKET-2178
>                 URL: https://issues.apache.org/jira/browse/WICKET-2178
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket, wicket-extensions
>    Affects Versions: 1.3.5
>         Environment: Redhat Linux 4 WS
> Java 1.6.0_12 (from Sun)
>            Reporter: Steven Katz
>            Assignee: Matej Knopp
>         Attachments: treeproblem.tgz
>
>
> Source that replicates the problem is attached.  Extract with 'tar xvzf treeproblem.tgz'
> The example works fine with wicket 1.3.4
> The page displays a Tree Component
> 1) Expand the top node of the tree
> 2) Select the first child node (or any node really)
> 3) Press the Delete link
> Here is the contents of the eclipse console window:
> 18:14:12.307 EVENT  Statistics on = false for org.mortbay.jetty.Server@19c26f5
> 18:14:12.333 EVENT  Starting Jetty/4.2.24
> 18:14:12.421 EVENT  Started WebApplicationContext[/quickstart,src/webapp]
> 18:14:12.587 WARN!! Delete existing temp dir /tmp/Jetty__8081__quickstart for WebApplicationContext[/quickstart,src/webapp]
> INFO  - Application                - [QuickStartApplication] init: Wicket core library initializer
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IBehaviorListener, method=public abstract void org.apache.wicket.behavior.IBehaviorListener.onRequest()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IBehaviorListener, method=public abstract void org.apache.wicket.behavior.IBehaviorListener.onRequest()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IFormSubmitListener, method=public abstract void org.apache.wicket.markup.html.form.IFormSubmitListener.onFormSubmitted()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IFormSubmitListener, method=public abstract void org.apache.wicket.markup.html.form.IFormSubmitListener.onFormSubmitted()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=ILinkListener, method=public abstract void org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=ILinkListener, method=public abstract void org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IOnChangeListener, method=public abstract void org.apache.wicket.markup.html.form.IOnChangeListener.onSelectionChanged()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IOnChangeListener, method=public abstract void org.apache.wicket.markup.html.form.IOnChangeListener.onSelectionChanged()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IRedirectListener, method=public abstract void org.apache.wicket.IRedirectListener.onRedirect()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IRedirectListener, method=public abstract void org.apache.wicket.IRedirectListener.onRedirect()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IResourceListener, method=public abstract void org.apache.wicket.IResourceListener.onResourceRequested()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IResourceListener, method=public abstract void org.apache.wicket.IResourceListener.onResourceRequested()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IActivePageBehaviorListener, method=public abstract void org.apache.wicket.behavior.IBehaviorListener.onRequest()]
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=IActivePageBehaviorListener, method=public abstract void org.apache.wicket.behavior.IBehaviorListener.onRequest()]
> INFO  - Application                - [QuickStartApplication] init: Wicket extensions initializer
> INFO  - WebApplication             - [QuickStartApplication] Started Wicket version 1.3.5 in development mode
> ********************************************************************
> *** WARNING: Wicket is running in DEVELOPMENT mode.              ***
> ***                               ^^^^^^^^^^^                    ***
> *** Do NOT deploy to your live server(s) without changing this.  ***
> *** See Application#getConfigurationType() for more information. ***
> ********************************************************************
> 18:14:12.688 EVENT  jsp: init
> 18:14:12.722 EVENT  default: init
> 18:14:12.724 EVENT  invoker: init
> 18:14:12.732 EVENT  Started SocketListener on 0.0.0.0:8081
> 18:14:12.732 EVENT  Started org.mortbay.jetty.Server@19c26f5
> INFO  - RequestListenerInterface   - registered listener interface [RequestListenerInterface name=INewBrowserWindowListener, method=public abstract void org.apache.wicket.markup.html.INewBrowserWindowListener.onNewBrowserWindow()]
> INFO  - Index                      - Yes I was Clicked!!
> ERROR - RequestCycle               - Cannot remove [MarkupContainer [Component id = 1]] from null parent!
> java.lang.IllegalStateException: Cannot remove [MarkupContainer [Component id = 1]] from null parent!
> 	at org.apache.wicket.Component.remove(Component.java:2203)
> 	at org.apache.wicket.markup.html.tree.AbstractTree.removeItem(AbstractTree.java:1466)
> 	at org.apache.wicket.markup.html.tree.AbstractTree.treeNodesRemoved(AbstractTree.java:837)
> 	at javax.swing.tree.DefaultTreeModel.fireTreeNodesRemoved(DefaultTreeModel.java:530)
> 	at javax.swing.tree.DefaultTreeModel.nodesWereRemoved(DefaultTreeModel.java:310)
> 	at javax.swing.tree.DefaultTreeModel.removeNodeFromParent(DefaultTreeModel.java:244)
> 	at wicket.quickstart.Index$1.onClick(Index.java:52)
> 	at org.apache.wicket.ajax.markup.html.AjaxLink$1.onEvent(AjaxLink.java:65)
> 	at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:163)
> 	at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:297)
> 	at org.apache.wicket.request.target.component.listener.BehaviorRequestTarget.processEvents(BehaviorRequestTarget.java:100)
> 	at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:91)
> 	at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1175)
> 	at org.apache.wicket.RequestCycle.step(RequestCycle.java:1252)
> 	at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1353)
> 	at org.apache.wicket.RequestCycle.request(RequestCycle.java:493)
> 	at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:355)
> 	at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:200)
> 	at org.mortbay.jetty.servlet.WebApplicationHandler$Chain.doFilter(WebApplicationHandler.java:334)
> 	at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:286)
> 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:567)
> 	at org.mortbay.http.HttpContext.handle(HttpContext.java:1807)
> 	at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:525)
> 	at org.mortbay.http.HttpContext.handle(HttpContext.java:1757)
> 	at org.mortbay.http.HttpServer.service(HttpServer.java:879)
> 	at org.mortbay.http.HttpConnection.service(HttpConnection.java:789)
> 	at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:960)
> 	at org.mortbay.http.HttpConnection.handle(HttpConnection.java:806)
> 	at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:218)
> 	at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:331)
> 	at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:520)
>  
> Here is the stack trace displayed in the browser:
> Root cause:
> java.lang.IllegalStateException: Cannot remove [MarkupContainer [Component id = 1]] from null parent!
> at org.apache.wicket.Component.remove(Component.java:2203)
> at org.apache.wicket.markup.html.tree.AbstractTree.removeItem(AbstractTree.java:1466)
> at org.apache.wicket.markup.html.tree.AbstractTree.treeNodesRemoved(AbstractTree.java:837)
> at javax.swing.tree.DefaultTreeModel.fireTreeNodesRemoved(DefaultTreeModel.java:530)
> at javax.swing.tree.DefaultTreeModel.nodesWereRemoved(DefaultTreeModel.java:310)
> at javax.swing.tree.DefaultTreeModel.removeNodeFromParent(DefaultTreeModel.java:244)
> at wicket.quickstart.Index$1.onClick(Index.java:52)
> at org.apache.wicket.ajax.markup.html.AjaxLink$1.onEvent(AjaxLink.java:65)
> at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:163)
> at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:297)
> at org.apache.wicket.request.target.component.listener.BehaviorRequestTarget.processEvents(BehaviorRequestTarget.java:100)
> at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:91)
> at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1175)
> at org.apache.wicket.RequestCycle.step(RequestCycle.java:1252)
> at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1353)
> at org.apache.wicket.RequestCycle.request(RequestCycle.java:493)
> at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:355)
> at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:200)
> at org.mortbay.jetty.servlet.WebApplicationHandler$Chain.doFilter(WebApplicationHandler.java:334)
> at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:286)
> at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:567)
> at org.mortbay.http.HttpContext.handle(HttpContext.java:1807)
> at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:525)
> at org.mortbay.http.HttpContext.handle(HttpContext.java:1757)
> at org.mortbay.http.HttpServer.service(HttpServer.java:879)
> at org.mortbay.http.HttpConnection.service(HttpConnection.java:789)
> at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:960)
> at org.mortbay.http.HttpConnection.handle(HttpConnection.java:806)
> at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:218)
> at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:331)
> at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:520)
> I investigated this down through the source and the problem seem related to a change made to AbstractTree (the one in wicket not wicket-extensions)
> Please see my comments on this nabble thread (reproduced below):
> http://www.nabble.com/Illegal-State-Exception-on-DefaultTeeModel.removeNodeFromParent-td20185042.html#a22547387
> I have the same problem using 1.3.5, but not when using 1.3.3.  I spent some time tracing the source code and it seems related to the addition of this line:
> getTreeState().selectNode((TreeNode)item.getModelObject(), false);
> at the very end of the function (line 835):
> AbstractTree.treeNodesRemoved()
> This line results (eventually) in a call to
> AbstractTree.invalidateNode()
> which on line 1295 calls:
> item.remove()
> which alters the state of "item" such that the call to item.remove() in AbstractTree.treeNodesRemoved() fails with the exception mentioned previously.
> I note that the IItemCallback() code, immediately above, calls two identical lines in the reverse order.  I wonder reversing the later two would fix the problem? 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.