You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Howard M. Lewis Ship (JIRA)" <ta...@jakarta.apache.org> on 2005/10/29 16:57:55 UTC
[jira] Resolved: (TAPESTRY-671) RedirectException being caught from page begin rendering method (in exception page) as an application exception rather than causing the redirect
[ http://issues.apache.org/jira/browse/TAPESTRY-671?page=all ]
Howard M. Lewis Ship resolved TAPESTRY-671:
-------------------------------------------
Resolution: Won't Fix
I you want to change the way Tapestry presents error, you can easily override the default ExceptionPresenter service. I think it is reasonable for Tapestry to expect that the Exception page should not fail.
> RedirectException being caught from page begin rendering method (in exception page) as an application exception rather than causing the redirect
> ------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: TAPESTRY-671
> URL: http://issues.apache.org/jira/browse/TAPESTRY-671
> Project: Tapestry
> Type: Bug
> Reporter: Leonardo Quijano Vincenzi
> Assignee: Howard M. Lewis Ship
> Priority: Minor
>
> As in TAPESTRY-647, my application is catching a RedirectException when I try to redirect from the Exception page.
> Such as this:
> /** @see PageBeginRenderListener#pageBeginRender(PageEvent) */
> public void pageBeginRender(PageEvent event) {
> Throwable value = getException();
> if((value instanceof PageNotFoundException)) {
> WebRequest request = getWebRequest();
> String activationPath = request.getActivationPath();
>
> redirectToExternalPage(event.getRequestCycle(), getExternalService(), "PageNotFound", activationPath);
> }
> redirectToExternalPage() just gets the appropiate link and throw() a RedirectException.
> This is the stack trace:
> org.apache.tapestry.RedirectException
> redirectLocation: /sigep/Index.html
> com.dtqsoftware.utils.web.WebUtils.redirectToPage(WebUtils.java:62)
> com.dtqsoftware.sigep.web.pages.Exception.pageBeginRender(Exception.java:83)
> org.apache.tapestry.AbstractPage.firePageBeginRender(AbstractPage.java:478)
> org.apache.tapestry.AbstractPage.renderPage(AbstractPage.java:268)
> org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:368)
> org.apache.tapestry.services.impl.ResponseRendererImpl.renderResponse(ResponseRendererImpl.java:71)
> $ResponseRenderer_1069ac67711.renderResponse($ResponseRenderer_1069ac67711.java)
> $ResponseRenderer_1069ac67710.renderResponse($ResponseRenderer_1069ac67710.java)
> org.apache.tapestry.error.ExceptionPresenterImpl.presentException(ExceptionPresenterImpl.java:46)
> $ExceptionPresenter_1069ac676ff.presentException($ExceptionPresenter_1069ac676ff.java)
> $ExceptionPresenter_1069ac676fe.presentException($ExceptionPresenter_1069ac676fe.java)
> org.apache.tapestry.engine.AbstractEngine.activateExceptionPage(AbstractEngine.java:121)
> org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:280)
> org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:60)
> ....
> etc()
> Following the code... seems the exception propagates down to ExceptionPresenterImpl. There it's nested in a more general ApplicationException, thereby losing its RedirectException status:
> public void presentException(IRequestCycle cycle, Throwable cause)
> {
> try
> {
> IPage exceptionPage = cycle.getPage(_exceptionPageName);
> exceptionPage.setProperty("exception", cause);
> cycle.activate(exceptionPage);
> _responseRenderer.renderResponse(cycle);
> }
> catch (Throwable ex)
> {
> // Worst case scenario. The exception page itself is broken, leaving
> // us with no option but to write the cause to the output.
> _requestExceptionReporter.reportRequestException(ErrorMessages
> .unableToProcessClientRequest(cause), cause);
> // Also, write the exception thrown when redendering the exception
> // page, so that can get fixed as well.
> _requestExceptionReporter.reportRequestException(ErrorMessages
> .unableToPresentExceptionPage(ex), ex);
> // And throw the exception.
> throw new ApplicationRuntimeException(ex.getMessage(), ex);
> }
> if (_verbose)
> _requestExceptionReporter.reportRequestException(ErrorMessages
> .unableToProcessClientRequest(cause), cause);
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org