The code doing the redirect implements
IRequestCycleListener#onBeginRequest - which returns void.
Here's the code snippet:
@Override
public void onBeginRequest(RequestCycle cycle) {
Session session = Session.get();
if (session.getMetaData(REDIRECTED_JSESSIONID) == null) {
logger.debug("first application request - redirecting to
loading page");
session.setMetaData(REDIRECTED_JSESSIONID, Boolean.TRUE);
String url = getServletRequestContextPath() + "/" +
cycle.getRequest().getUrl();
throw new RestartResponseException(newLoadingPage(url));
}
}
I've tried the following which "kind of" works (but still don't get why
throwing that Exception is not supported in 1.5) :
cycle.getResponse().reset(); // not sure if needed?
cycle.replaceAllRequestHandlers(new RenderPageRequestHandler(new
PageProvider(newLoadingPage(url))));
Now the redirect is done but the log shows the following stack trace
(which doesn't looks right):
ERROR - DefaultExceptionMapper - Unexpected error occurred
org.eclipse.jetty.io.RuntimeIOException: java.io.IOException: Closed
at
org.eclipse.jetty.io.UncheckedPrintWriter.setError(UncheckedPrintWriter.java:110)
at
org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:283)
at
org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:298)
at java.io.PrintWriter.append(Unknown Source)
at
org.apache.wicket.protocol.http.servlet.ServletWebResponse.write(ServletWebResponse.java:106)
at
org.apache.wicket.protocol.http.HeaderBufferingWebResponse.write(HeaderBufferingWebResponse.java:174)
at
org.apache.wicket.protocol.http.BufferedWebResponse$WriteCharSequenceAction.invoke(BufferedWebResponse.java:161)
at
org.apache.wicket.protocol.http.BufferedWebResponse.writeTo(BufferedWebResponse.java:580)
at
org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:247)
at
org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:167)
at
org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:750)
at
org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
at
org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:252)
at
org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:209)
at
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:280)
at
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:162)
at
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:218)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1326)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:479)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:940)
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:874)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
at org.eclipse.jetty.server.Server.handle(Server.java:349)
at
org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441)
at
org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:904)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:565)
at
org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:217)
at
org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:50)
at
org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:245)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Closed
at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:147)
at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:96)
at java.io.ByteArrayOutputStream.writeTo(Unknown Source)
at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:283)
at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:107)
at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:96)
at
org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:274)
... 36 more
On 14.12.2011 15:28, Martin Grigorov wrote:
Hi,
No need to throw exceptions.
You just need to return IRequestHandler impl that should be used to
handle the error (I assume you talk about
IRequestCycleListener#onException())
Try with: return new RenderPageRequestHandler(new PageProvider(SomePage.class))
On Wed, Dec 14, 2011 at 4:20 PM, Daniel Soneira
<[email protected]> wrote:
Hi there,
Throwing a RestartResponseException in a custom RequestCycleListener does
not yield the result I was hoping for.
Instead of redirecting to the specified page the DefaultExceptionMapper only
shows an Unexpected RuntimeException page.
The equivalent code (within a custom RequestCycle) used to work in 1.4.
Here's the log:
ERROR - DefaultExceptionMapper - Unexpected error occurred
org.apache.wicket.RestartResponseException
The listener tries do redirect the very FIRST request - so you have to
restart the jetty server when analyzing the problem.
Attached you'll find a quickstart that demonstrates the problem.
Note: The code is essentially the same as in WICKET-3248.
Any help on this matter is appreciated.
I can also create a JIRA issue if needed.
Kind regards,
Daniel Soneira
--
www.joyn-it.at
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]