https://issues.apache.org/bugzilla/show_bug.cgi?id=52157

--- Comment #1 from Brad Plies <bpl...@bulliondirect.com> 2011-11-08 20:58:17 
UTC ---
Attempted example

// See:
http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponseWrapper.html
class MyWrapper extends HttpServletResponseWrapper 
{
    public MyWrapper(HttpServletResponse response) { super(response); }
    // This was working fine with Tomcat 7.0.20
    public void sendResponse() throws IOException
    {
        this.pw.flush(); this.pw.close();
        ServletOutputStream realStream = super.getOutputStream(); 
        byte[] byteArray = basos.baos.toByteArray();
        realStream.write(byteArray); realStream.flush();
    }
    // NOTE: Alternate Writer & OutputStream
    MyOutputStream basos = new MyOutputStream();
    PrintWriter pw = new PrintWriter(basos);

    // NOTE: Overriding default behavior of Wrapper, returning alternates
    public ServletOutputStream getOutputStream() throws IOException { return
basos; }
    public PrintWriter getWriter() throws IOException { return pw; }
    }
}

public class MyFilter implements Filter
{
    @Override
    public void doFilter(final ServletRequest request, final ServletResponse
response,
        final FilterChain chain) throws IOException, ServletException
    {
        final HttpServletRequest httpRequest = (HttpServletRequest) request;
        final MyWrapper wrappedResponse = 
            new MyWrapper((HttpServletResponse) response);

        chain.doFilter(httpRequest, wrappedResponse);
        // ... Something down the chain called wrappedResponse.sendRedirect()

        if (someCondition) 
        {
            // Override redirect and handle response directly or something
            response.sendErrorPage(...); // NOTE: Original response object,
discarding anything written to the wrapped buffer

            // !!! Blows up in Tomcat 7.0.21 because sendRedirect()
circumvented the Wrapper's Writer
        }
        else
        {
            // Accept the wrapped Response as the output
            // Set response output to be same as wrappedResponse output
        }
    }
}

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to