[ https://issues.apache.org/jira/browse/WICKET-4637?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13405932#comment-13405932 ]
Bertrand Guay-Paquet commented on WICKET-4637: ---------------------------------------------- Steps to reproduce: 1-http://localhost:8080/ 2-click on "Page with links to redirect" 3-click on "throw new NonResettingRestartException()" > HeaderBufferingWebResponse#writeMetaData(WebResponse) throws > ConcurrentModificationException when invoked in a link handler > --------------------------------------------------------------------------------------------------------------------------- > > Key: WICKET-4637 > URL: https://issues.apache.org/jira/browse/WICKET-4637 > Project: Wicket > Issue Type: Bug > Components: wicket > Affects Versions: 1.5.7 > Reporter: Bertrand Guay-Paquet > Labels: response > Attachments: wicket-4637.zip > > > This ticket follows from the email thread > http://markmail.org/thread/uk5y4ddoopntmkgd > I use the following ReplaceHandlerException to trigger a redirect which > restarts the response but does not discard the response's meta data (e.g. > cookies). > /** > * Response restarting exception which does not reset the header meta data. > */ > public class NonResettingRestartException extends ReplaceHandlerException { > public NonResettingRestartException(final Class<? extends Page> > pageClass, > final PageParameters params, final RequestCycle cycle) { > super(createRequestHandler(pageClass, params), true); > Response response = cycle.getResponse(); > if (response instanceof IMetaDataBufferingWebResponse) { > IMetaDataBufferingWebResponse bufferingWebResponse = > (IMetaDataBufferingWebResponse) response; > WebResponse originalResponse = (WebResponse) cycle > .getOriginalResponse(); > bufferingWebResponse.writeMetaData(originalResponse); > } > } > private static IRequestHandler createRequestHandler( > Class<? extends Page> pageClass, PageParameters params) > { > return new RenderPageRequestHandler(new PageProvider(pageClass, > params)); > } > } > When this exception is thrown from a link handler, a > ConcurrentModificationException occurs with the following stack trace: > HeaderBufferingWebResponse.addCookie(Cookie) line: 72 > BufferedWebResponse$AddCookieAction.invoke(WebResponse) line: 240 > BufferedWebResponse.writeMetaData(WebResponse) line: 75 > HeaderBufferingWebResponse.writeMetaData(WebResponse) line: 205 > NonResettingRestartException.<init>(Class<Page>, PageParameters, > RequestCycle) line: 28 > LinkPage$4.onClick() line: 38 > Analysis: > 1) HeaderBufferingWebResponse delegates #writeMetaData() to its > bufferedResponse (a BufferedWebResponse instance). > 2) BufferedWebResponse iterates its action list with the single > "AddCookieAction" and invoke()s it > 3) BufferedWebResponse$AddCookieAction.invoke does > "response.addCookie(cookie)" > 4) The addCookie is executed with this==BufferedWebResponse from 2) which > modifies the action list illegally -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira