Open Kilda Java Documentation
ResponseWrapper.java
Go to the documentation of this file.
1 package org.openkilda.security.filter;
2 
3 import java.io.IOException;
4 import java.io.OutputStreamWriter;
5 import java.io.PrintWriter;
6 import java.util.UUID;
7 
8 import javax.servlet.ServletOutputStream;
9 import javax.servlet.http.HttpServletResponse;
10 import javax.servlet.http.HttpServletResponseWrapper;
11 
20 public class ResponseWrapper extends HttpServletResponseWrapper {
21 
22  private UUID id;
23  private ServletOutputStream outputStream;
24  private PrintWriter writer;
25  private ServletOutputStreamWrapper streamWrapper;
26 
27  public ResponseWrapper(UUID requestId, HttpServletResponse response) {
28  super(response);
29  this.id = requestId;
30  }
31 
32  /*
33  * (non-Javadoc)
34  *
35  * @see javax.servlet.ServletResponseWrapper#getOutputStream()
36  */
37  @Override
38  public ServletOutputStream getOutputStream() throws IOException {
39  if (writer != null) {
40  throw new IllegalStateException("Writer has already been read on this response.");
41  }
42 
43  if (outputStream == null) {
44  outputStream = getResponse().getOutputStream();
45  streamWrapper = new ServletOutputStreamWrapper(outputStream);
46  }
47  return streamWrapper;
48  }
49 
50  /*
51  * (non-Javadoc)
52  *
53  * @see javax.servlet.ServletResponseWrapper#getWriter()
54  */
55  @Override
56  public PrintWriter getWriter() throws IOException {
57  if (outputStream != null) {
58  throw new IllegalStateException("Stream has already been read on this response.");
59  }
60 
61  if (writer == null) {
62  streamWrapper = new ServletOutputStreamWrapper(getResponse().getOutputStream());
63  writer =
64  new PrintWriter(new OutputStreamWriter(streamWrapper, getResponse()
65  .getCharacterEncoding()), true);
66  }
67 
68  return writer;
69  }
70 
71  /*
72  * (non-Javadoc)
73  *
74  * @see javax.servlet.ServletResponseWrapper#flushBuffer()
75  */
76  @Override
77  public void flushBuffer() throws IOException {
78  if (writer != null) {
79  writer.flush();
80  } else if (outputStream != null) {
81  streamWrapper.flush();
82  }
83  }
84 
90  public byte[] getData() {
91  if (streamWrapper != null) {
92  return streamWrapper.getData();
93  }
94  return new byte[0];
95  }
96 
102  public UUID getId() {
103  return id;
104  }
105 }
ResponseWrapper(UUID requestId, HttpServletResponse response)