replace getRequestCycle().scheduleRequestHandlerAfterCurrent

2015-01-26 Thread Roland Dobsai
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

2015-01-26 Thread Roland Dobsai
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

2015-01-26 Thread Martin Grigorov
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

2015-01-26 Thread Roland Dobsai
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

2015-01-26 Thread Martin Grigorov
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