View Javadoc

1   package ch.qos.logback.access.servlet;
2   
3   import java.io.IOException;
4   import java.io.OutputStreamWriter;
5   import java.io.PrintWriter;
6   
7   import javax.servlet.ServletOutputStream;
8   import javax.servlet.http.HttpServletResponse;
9   import javax.servlet.http.HttpServletResponseWrapper;
10  
11  public class TeeHttpServletResponse extends HttpServletResponseWrapper {
12  
13    TeeServletOutputStream teeServletOutputStream;
14    PrintWriter teeWriter;
15  
16    public TeeHttpServletResponse(HttpServletResponse httpServletResponse) {
17      super(httpServletResponse);
18    }
19  
20    @Override
21    public ServletOutputStream getOutputStream() throws IOException {
22      if (teeServletOutputStream == null) {
23        teeServletOutputStream = new TeeServletOutputStream(this.getResponse());
24      }
25      return teeServletOutputStream;
26    }
27  
28    @Override
29    public PrintWriter getWriter() throws IOException {
30      if (this.teeWriter == null) {
31        this.teeWriter = new PrintWriter(new OutputStreamWriter(getOutputStream()),
32            true);
33      }
34      return this.teeWriter;
35    }
36  
37    @Override
38    public void flushBuffer() {
39      if (this.teeWriter != null) {
40        this.teeWriter.flush();
41      }
42    }
43  
44    byte[] getOutputBuffer() {
45      // teeServletOutputStream can be null if the getOutputStream method is never
46      // called.
47      if (teeServletOutputStream != null) {
48        return teeServletOutputStream.getOutputStreamAsByteArray();
49      } else {
50        return null;
51      }
52    }
53  
54    void finish() throws IOException {
55      if (this.teeWriter != null) {
56        this.teeWriter.close();
57      }
58      if (this.teeServletOutputStream != null) {
59        this.teeServletOutputStream.close();
60      }
61    }
62  }