View Javadoc

1   package ch.qos.logback.access.servlet;
2   
3   import java.io.ByteArrayInputStream;
4   import java.io.IOException;
5   import java.io.InputStream;
6   
7   import javax.servlet.ServletInputStream;
8   import javax.servlet.http.HttpServletRequest;
9   
10  class TeeServletInputStream extends ServletInputStream {
11  
12    InputStream in;
13    byte[] inputBuffer;
14  
15    TeeServletInputStream(HttpServletRequest request) {
16      duplicateInputStream(request);
17    }
18  
19    @Override
20    public int read() throws IOException {
21      //System.out.println("zzzzzzzzzz TeeServletInputStream.read called");
22      return in.read();
23    }
24  
25    private void duplicateInputStream(HttpServletRequest request) {
26      try {
27        int len = request.getContentLength();
28        ServletInputStream originalSIS = request.getInputStream();
29        if (len < 0) {
30          in = originalSIS;
31        } else {
32          inputBuffer = new byte[len];
33          int n = originalSIS.read(inputBuffer, 0, len);
34          assert n == len;
35          this.in = new ByteArrayInputStream(inputBuffer);       
36          originalSIS.close();
37        }
38      } catch (IOException e) {
39        e.printStackTrace();
40      }
41    }
42  
43    byte[] getInputBuffer() {
44      return inputBuffer;
45    }
46  }