[ 
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

        

Reply via email to