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
46
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 }