replace getRequestCycle().scheduleRequestHandlerAfterCurrent
Hi we're using getRequestCycle().scheduleRequestHandlerAfterCurrent, various places in our application which causes 500 error, is there any we to replace, lines below because my solution which is: String url = RequestCycle.get().urlFor(rs).toString(); throw new RedirectToUrlException(url); doesn't work. /// ResourceStreamRequestHandler rs = new ResourceStreamRequestHandler( new StringResourceStream(work, text/csv)); rs.setFileName(Workdone_ + projectModel.getObject().getName().replaceAll([^a-zA-Z0-9], ) + .csv); this.getRequestCycle().scheduleRequestHandlerAfterCurrent(rs); or another example I was trying to replace ResourceStreamRequestHandler rs = new ResourceStreamRequestHandler(new FileResourceStream(new File(file.getAbsolutePath(; rs.setFileName(df.getFileName()); this.getRequestCycle().scheduleRequestHandlerAfterCurrent(rs); with this, but doesnt work either: String url = (RequestCycle.get().urlFor(rs)).toString(); throw new RedirectToUrlException(url); thanks for any help
Re: replace getRequestCycle().scheduleRequestHandlerAfterCurrent
thanks for a replay, yes there is an exception in a log here's an example HTTP Status 500 - Cannot call sendRedirect() after the response has been committed -- *type* Exception report *message* *Cannot call sendRedirect() after the response has been committed* *description* *The server encountered an internal error that prevented it from fulfilling this request.* *exception* java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:482) javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:137) hub.app.servlet.RelativeUrlFilter$RelativeUrlServletResponseFilter.sendRedirect(RelativeUrlFilter.java:106) org.apache.wicket.protocol.http.servlet.ServletWebResponse.sendRedirect(ServletWebResponse.java:268) org.apache.wicket.protocol.http.BufferedWebResponse$SendRedirectAction.invoke(BufferedWebResponse.java:400) org.apache.wicket.protocol.http.BufferedWebResponse.writeTo(BufferedWebResponse.java:588) org.apache.wicket.protocol.http.HeaderBufferingWebResponse.stopBuffering(HeaderBufferingWebResponse.java:60) org.apache.wicket.protocol.http.HeaderBufferingWebResponse.flush(HeaderBufferingWebResponse.java:97) org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:269) org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:282) hub.app.servlet.RelativeUrlFilter.doFilter(RelativeUrlFilter.java:54) com.wideplay.warp.persist.PersistenceFilter$3.run(PersistenceFilter.java:141) com.wideplay.warp.persist.internal.Lifecycles.failEarlyAndLeaveNoOneBehind(Lifecycles.java:29) com.wideplay.warp.persist.PersistenceFilter.doFilter(PersistenceFilter.java:155) *note* *The full stack trace of the root cause is available in the Apache Tomcat/7.0.55 logs.* 2015-01-26 13:59 GMT+00:00 Martin Grigorov mgrigo...@apache.org: Hi, Error 500 means that there must be an exception in the logs. What is it ? What exactly doesn't work means in your case ? Another exception, or no-op behavior, or ... ? Please give more details. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Mon, Jan 26, 2015 at 3:45 PM, Roland Dobsai roland.dob...@gmail.com wrote: Hi we're using getRequestCycle().scheduleRequestHandlerAfterCurrent, various places in our application which causes 500 error, is there any we to replace, lines below because my solution which is: String url = RequestCycle.get().urlFor(rs).toString(); throw new RedirectToUrlException(url); doesn't work. /// ResourceStreamRequestHandler rs = new ResourceStreamRequestHandler( new StringResourceStream(work, text/csv)); rs.setFileName(Workdone_ + projectModel.getObject().getName().replaceAll([^a-zA-Z0-9], ) + .csv); this.getRequestCycle().scheduleRequestHandlerAfterCurrent(rs); or another example I was trying to replace ResourceStreamRequestHandler rs = new ResourceStreamRequestHandler(new FileResourceStream(new File(file.getAbsolutePath(; rs.setFileName(df.getFileName()); this.getRequestCycle().scheduleRequestHandlerAfterCurrent(rs); with this, but doesnt work either: String url = (RequestCycle.get().urlFor(rs)).toString(); throw new RedirectToUrlException(url); thanks for any help
Re: replace getRequestCycle().scheduleRequestHandlerAfterCurrent
Wicket by default buffers the write/flush of the markup to the browser until the end of the the request cycle. The exception says that the application has already written some bytes/characters to the browser and it is not possible to make a redirect, because the response headers are already sent. Put a breakpoint at RelativeUrlServletResponseFilter#write() methods and see when and why it is being called earlier. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Mon, Jan 26, 2015 at 4:06 PM, Roland Dobsai roland.dob...@gmail.com wrote: thanks for a replay, yes there is an exception in a log here's an example HTTP Status 500 - Cannot call sendRedirect() after the response has been committed -- *type* Exception report *message* *Cannot call sendRedirect() after the response has been committed* *description* *The server encountered an internal error that prevented it from fulfilling this request.* *exception* java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:482) javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:137) hub.app.servlet.RelativeUrlFilter$RelativeUrlServletResponseFilter.sendRedirect(RelativeUrlFilter.java:106) org.apache.wicket.protocol.http.servlet.ServletWebResponse.sendRedirect(ServletWebResponse.java:268) org.apache.wicket.protocol.http.BufferedWebResponse$SendRedirectAction.invoke(BufferedWebResponse.java:400) org.apache.wicket.protocol.http.BufferedWebResponse.writeTo(BufferedWebResponse.java:588) org.apache.wicket.protocol.http.HeaderBufferingWebResponse.stopBuffering(HeaderBufferingWebResponse.java:60) org.apache.wicket.protocol.http.HeaderBufferingWebResponse.flush(HeaderBufferingWebResponse.java:97) org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:269) org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:282) hub.app.servlet.RelativeUrlFilter.doFilter(RelativeUrlFilter.java:54) com.wideplay.warp.persist.PersistenceFilter$3.run(PersistenceFilter.java:141) com.wideplay.warp.persist.internal.Lifecycles.failEarlyAndLeaveNoOneBehind(Lifecycles.java:29) com.wideplay.warp.persist.PersistenceFilter.doFilter(PersistenceFilter.java:155) *note* *The full stack trace of the root cause is available in the Apache Tomcat/7.0.55 logs.* 2015-01-26 13:59 GMT+00:00 Martin Grigorov mgrigo...@apache.org: Hi, Error 500 means that there must be an exception in the logs. What is it ? What exactly doesn't work means in your case ? Another exception, or no-op behavior, or ... ? Please give more details. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Mon, Jan 26, 2015 at 3:45 PM, Roland Dobsai roland.dob...@gmail.com wrote: Hi we're using getRequestCycle().scheduleRequestHandlerAfterCurrent, various places in our application which causes 500 error, is there any we to replace, lines below because my solution which is: String url = RequestCycle.get().urlFor(rs).toString(); throw new RedirectToUrlException(url); doesn't work. /// ResourceStreamRequestHandler rs = new ResourceStreamRequestHandler( new StringResourceStream(work, text/csv)); rs.setFileName(Workdone_ + projectModel.getObject().getName().replaceAll([^a-zA-Z0-9], ) + .csv); this.getRequestCycle().scheduleRequestHandlerAfterCurrent(rs); or another example I was trying to replace ResourceStreamRequestHandler rs = new ResourceStreamRequestHandler(new FileResourceStream(new File(file.getAbsolutePath(; rs.setFileName(df.getFileName()); this.getRequestCycle().scheduleRequestHandlerAfterCurrent(rs); with this, but doesnt work either: String url = (RequestCycle.get().urlFor(rs)).toString(); throw new RedirectToUrlException(url); thanks for any help
Re: replace getRequestCycle().scheduleRequestHandlerAfterCurrent
It seems we cannot reproduce this locally - only in production. Difference being apache is in front of tomcat. If we comment out the following code we have no issues: setPageRendererProvider(new IPageRendererProvider() { @Override public PageRenderer get(final RenderPageRequestHandler context) { return new WebPageRenderer(context) { @Override protected RedirectPolicy getRedirectPolicy() { RedirectPolicy result; if (!((WebRequest) RequestCycle.get().getRequest()).isAjax() (context.getPage() instanceof ExternalShareSecurePage || context.getPage() instanceof ExternalShareDocumentPage)) { result = RedirectPolicy.NEVER_REDIRECT; } else { result = super.getRedirectPolicy(); } return result; } }; } }); 2015-01-26 14:17 GMT+00:00 Martin Grigorov mgrigo...@apache.org: Wicket by default buffers the write/flush of the markup to the browser until the end of the the request cycle. The exception says that the application has already written some bytes/characters to the browser and it is not possible to make a redirect, because the response headers are already sent. Put a breakpoint at RelativeUrlServletResponseFilter#write() methods and see when and why it is being called earlier. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Mon, Jan 26, 2015 at 4:06 PM, Roland Dobsai roland.dob...@gmail.com wrote: thanks for a replay, yes there is an exception in a log here's an example HTTP Status 500 - Cannot call sendRedirect() after the response has been committed -- *type* Exception report *message* *Cannot call sendRedirect() after the response has been committed* *description* *The server encountered an internal error that prevented it from fulfilling this request.* *exception* java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:482) javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:137) hub.app.servlet.RelativeUrlFilter$RelativeUrlServletResponseFilter.sendRedirect(RelativeUrlFilter.java:106) org.apache.wicket.protocol.http.servlet.ServletWebResponse.sendRedirect(ServletWebResponse.java:268) org.apache.wicket.protocol.http.BufferedWebResponse$SendRedirectAction.invoke(BufferedWebResponse.java:400) org.apache.wicket.protocol.http.BufferedWebResponse.writeTo(BufferedWebResponse.java:588) org.apache.wicket.protocol.http.HeaderBufferingWebResponse.stopBuffering(HeaderBufferingWebResponse.java:60) org.apache.wicket.protocol.http.HeaderBufferingWebResponse.flush(HeaderBufferingWebResponse.java:97) org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:269) org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:282) hub.app.servlet.RelativeUrlFilter.doFilter(RelativeUrlFilter.java:54) com.wideplay.warp.persist.PersistenceFilter$3.run(PersistenceFilter.java:141) com.wideplay.warp.persist.internal.Lifecycles.failEarlyAndLeaveNoOneBehind(Lifecycles.java:29) com.wideplay.warp.persist.PersistenceFilter.doFilter(PersistenceFilter.java:155) *note* *The full stack trace of the root cause is available in the Apache Tomcat/7.0.55 logs.* 2015-01-26 13:59 GMT+00:00 Martin Grigorov mgrigo...@apache.org: Hi, Error 500 means that there must be an exception in the logs. What is it ? What exactly doesn't work means in your case ? Another exception, or no-op behavior, or ... ? Please give more details. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Mon, Jan 26, 2015 at 3:45 PM, Roland Dobsai roland.dob...@gmail.com wrote: Hi we're using getRequestCycle().scheduleRequestHandlerAfterCurrent, various places in our application which causes 500 error, is there any we to replace, lines below because my solution which is: String url = RequestCycle.get().urlFor(rs).toString(); throw new RedirectToUrlException(url); doesn't work. /// ResourceStreamRequestHandler rs = new ResourceStreamRequestHandler( new StringResourceStream(work, text/csv)); rs.setFileName(Workdone_ + projectModel.getObject().getName().replaceAll([^a-zA-Z0-9], ) + .csv); this.getRequestCycle().scheduleRequestHandlerAfterCurrent(rs); or another example I was trying to replace ResourceStreamRequestHandler rs = new
Re: replace getRequestCycle().scheduleRequestHandlerAfterCurrent
Hi, Error 500 means that there must be an exception in the logs. What is it ? What exactly doesn't work means in your case ? Another exception, or no-op behavior, or ... ? Please give more details. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Mon, Jan 26, 2015 at 3:45 PM, Roland Dobsai roland.dob...@gmail.com wrote: Hi we're using getRequestCycle().scheduleRequestHandlerAfterCurrent, various places in our application which causes 500 error, is there any we to replace, lines below because my solution which is: String url = RequestCycle.get().urlFor(rs).toString(); throw new RedirectToUrlException(url); doesn't work. /// ResourceStreamRequestHandler rs = new ResourceStreamRequestHandler( new StringResourceStream(work, text/csv)); rs.setFileName(Workdone_ + projectModel.getObject().getName().replaceAll([^a-zA-Z0-9], ) + .csv); this.getRequestCycle().scheduleRequestHandlerAfterCurrent(rs); or another example I was trying to replace ResourceStreamRequestHandler rs = new ResourceStreamRequestHandler(new FileResourceStream(new File(file.getAbsolutePath(; rs.setFileName(df.getFileName()); this.getRequestCycle().scheduleRequestHandlerAfterCurrent(rs); with this, but doesnt work either: String url = (RequestCycle.get().urlFor(rs)).toString(); throw new RedirectToUrlException(url); thanks for any help