You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Martin Grigorov (JIRA)" <ji...@apache.org> on 2012/07/04 16:36:35 UTC

[jira] [Resolved] (WICKET-4637) HeaderBufferingWebResponse#writeMetaData(WebResponse) throws ConcurrentModificationException when invoked in a link handler

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

Martin Grigorov resolved WICKET-4637.
-------------------------------------

    Resolution: Not A Problem

Closing as 'Not a problem'.
Thank you, guys!
                
> 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, wicket-4637_2.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