Adam, thanks for the reply but upgrading won't help in this case.
I've already looked at the source for the full 1.1 release and this
issue is not addressed.

Also, I'm not using Tomcat, I'm using ServletExec4.2 with the latest patch.
The servlet container has nothing to do with this problem.

It is fairly evident that the problem is that the response is being written
to after it has been committed. I've suggested a workaround and might
implement it.

I just wanted to know if this issue has been addressed.

I don't necessarily think it is the responsibility of the RequestProcessor
to check to see if the response has already been committed before writing to
it,
but as more and more plugin's are added (TilesRequestProcessor,
SecureRequestProcessor, etc...)
it may become necessary to check for this condition.


If I'm missing something obvious, please let me know.

robert



> -----Original Message-----
> From: Adam Hardy [mailto:[EMAIL PROTECTED]
> Sent: Saturday, August 30, 2003 9:45 AM
> To: Struts Users Mailing List
> Subject: Re: [OT] sslext java.lang.IllegalStateException: sendError()
> failed - data has already been sent to client
>
>
> It might sound like Microsoft Support Hotline, but you should upgrade to
> the full 1.1 release. Plus of interest would be the tomcat version.
>
> On 08/29/2003 11:22 PM Robert Taylor wrote:
> > I'm using Struts1.1rc2 with sslext for Struts1.1rc2 and am seeing some
> > peculiar behavior
> > when an invalid path is requested.
> >
> > What should happen is the RequestProcessor.processMapping()
> should recognize
> > that
> > there is no action mapping for the path, log a message, and send an 400
> > (Invalid Request) response
> > directly back to the client.
> >
> > That's what is happening here.
> > 10156: Aug 29, 2003 4:53:36 PM org.apache.struts.action.RequestProcessor
> > processMapping
> > SEVERE: Invalid path /something was requested
> >
> >
> > But what happens is that SecureRequestProcess.preProcess() invokes
> > RequestProcessor.processMapping()
> > which logs the above error message, then returns null.
> > SecureRequestProcessor then returns true because
> > no mapping was found. Then RequestProcessor invokes its own
> processMapping()
> > which is when the
> > IllegalStateException is thrown because the response has already been
> > committed.
> >
> > 10156: Aug 29, 2003 4:53:36 PM org.apache.struts.action.RequestProcessor
> > processMapping
> > SEVERE: Invalid path /something was requested
> > 10156: ServletExec: caught exception - java.lang.IllegalStateException:
> > sendError() failed - data has already
> >  been sent to client
> > 10156: java.lang.IllegalStateException: sendError() failed - data has
> > already been sent to client
> > 10156:  at
> com.newatlanta.servletexec.Response.sendError(Response.java:670)
> > 10156:  at
> >
> org.apache.struts.action.RequestProcessor.processMapping(RequestPr
> ocessor.ja
> > va:679)
> > 10156:  at
> >
> org.apache.struts.action.RequestProcessor.process(RequestProcessor
> .java:242)
> > 10156:  at
> > org.apache.struts.action.ActionServlet.process(ActionServlet.java:1421)
> > 10156:  at
> > org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:500)
> > 10156:  at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
> > 10156:  at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> > 10156:  at
> >
> com.newatlanta.servletexec.ServletExec.CallServletService(ServletE
> xec.java:1
> > 679)
> > 10156:  at
> >
> com.newatlanta.servletexec.SERequestDispatcher.forwardServlet(SERe
> questDispa
> > tcher.java:280)
> > 10156:  at
> >
> com.newatlanta.servletexec.SERequestDispatcher.forward(SERequestDi
> spatcher.j
> > ava:191)
> > 10156:  at
> >
> com.newatlanta.servletexec.ApplicationInfo.processApplRequest(Appl
> icationInf
> > o.java:1447)
> > 10156:  at
> >
> com.newatlanta.servletexec.ServerHostInfo.processApplRequest(Serve
> rHostInfo.
> > java:1242)
> > 10156:  at
> >
> com.newatlanta.servletexec.ServletExec.ProcessRequest(ServletExec.
> java:1235)
> > 10156:  at
> >
> com.newatlanta.servletexec.ServletExec.ProcessRequest(ServletExec.
> java:1113)
> >
> >
> > I'm assuming that this exception is trapped, because I get the
> expected page
> > back in the browser.
> > Should I be worried about this? One possible work around would
> be to check
> > to see if the
> > response has already been commited before attempting to write
> to it. I'm not
> > sure how that would
> > impact the rest of the logic in the RequestProcessor.
> >
> > robert
> >
> > PS. I've created a test web app which duplicates the behavior described
> > above. If I remove
> > <controller
> > processorClass="org.apache.struts.action.SecureRequestProcessor"/> from
> > struts-config.xml
> > then I don't see the exception stack trace.
> >
> > BTW: Below is a snippet of code from RequestProcessor where the
> exception is
> > being thrown:
> >
> > <snip>
> > // No mapping can be found to process this request
> > log.error(getInternal().getMessage("processInvalid", path));
> > response.sendError(HttpServletResponse.SC_BAD_REQUEST,       //
> <===== Here
> > getInternal().getMessage("processInvalid", path));
> > </snip>
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
> --
> struts 1.1 + tomcat 4.1.27 + java 1.4.2
> Linux 2.4.20 RH9
>
>
> ---------------------------------------------------------------------
> 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]

Reply via email to