Description
I've debugged it a bit and this is what happens:
- Open some page with enclosure
- Markup is parsed - ComponentTag of enclosure gets id: wicket_enclosure1011
- Enclosure component is created and gets id from ComponentTag: wicket_enclosure1011
- Page is rendered in browser - everything ok sofar
- Restart server
- Hit F5 in browser
- Markup is parsed - ComponentTag of enclosure gets different id than in the first request: wicket_enclosure112113
- Enclosure component is not created again (it is taken from page map??) - but this component has id from first request: wicket_enclosure1011
- Enclosure.getMarkup() is called which delegates search to AssociatedMarkupSourcingStrategy.getMarkup() and here on line 117 it tries to find markup of enclosure by wrong id.
- This obviously fails and markup is not found which results in this exception
java.lang.IllegalArgumentException: Argument 'markup' may not be null. at org.apache.wicket.util.lang.Args.notNull(Args.java:41) ~[wicket-util-7.3.0-SNAPSHOT.jar:7.3.0-SNAPSHOT] at org.apache.wicket.markup.MarkupStream.<init>(MarkupStream.java:65) ~[wicket-core-7.3.0-SNAPSHOT.jar:7.3.0-SNAPSHOT] at org.apache.wicket.markup.html.internal.Enclosure.getChild(Enclosure.java:136) ~[wicket-core-7.3.0-SNAPSHOT.jar:7.3.0-SNAPSHOT] at org.apache.wicket.markup.html.internal.Enclosure.onConfigure(Enclosure.java:178) ~[wicket-core-7.3.0-SNAPSHOT.jar:7.3.0-SNAPSHOT] at org.apache.wicket.Component.configure(Component.java:1055) ~[wicket-core-7.3.0-SNAPSHOT.jar:7.3.0-SNAPSHOT] at org.apache.wicket.Component.internalBeforeRender(Component.java:940) ~[wicket-core-7.3.0-SNAPSHOT.jar:7.3.0-SNAPSHOT] at org.apache.wicket.Component.beforeRender(Component.java:1017) ~[wicket-core-7.3.0-SNAPSHOT.jar:7.3.0-SNAPSHOT] at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1831) ~[wicket-core-7.3.0-SNAPSHOT.jar:7.3.0-SNAPSHOT] ... 55 common frames omitted
I will try to create a quickstart, but I don't know if I will be able to simulate this on simple page. Id of the enclosure is created by AbstractMarkupFilter.getRequestUniqueId() so the only way the id could be different is that another components call getRequestUniqueId() in different order each time. (or maybe I'am wrong.. )
EDIT:
Please see the attached quickstart. Steps to reproduce:
- Start quickstart
- Go to localhost:8888
- Click on Go to page 2
- Restart the server
- Hit F5 in the browser
Note that session persistance is enabled.
Attachments
Attachments
Issue Links
- relates to
-
WICKET-6093 MarkupException due to ID collision in RelativePathPrefixHandler
- Resolved