package com.github.bjuvensjo.rsimulator.recorder; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.*; /** * A HttpServletRequestWrapper which buffers data to a byte array * * @author Anders Bälter */ public class RecorderServletRequestWrapper extends HttpServletRequestWrapper { ByteArrayInputStream bais; ByteArrayOutputStream baos; BufferedServletInputStream bsis; byte[] buffer; public RecorderServletRequestWrapper(HttpServletRequest req) throws IOException { super(req); initByteArrayOutputStream(req.getInputStream()); } private void initByteArrayOutputStream(InputStream is) throws IOException { baos = new ByteArrayOutputStream(); byte buffer[] = new byte[1024]; int letti; while((letti = is.read(buffer)) > 0) baos.write(buffer, 0, letti); this.buffer = baos.toByteArray(); } @Override public ServletInputStream getInputStream() { try { bais = new ByteArrayInputStream(buffer); bsis = new BufferedServletInputStream(bais); } catch (Exception ex) { ex.printStackTrace(); } return bsis; } public byte[] getBuffer() { return buffer; } public String getRequestBody(String encoding) throws UnsupportedEncodingException { return new String(buffer, encoding); } /** * Get the request buffer as a String * @param encoding * @return String * @throws UnsupportedEncodingException */ public String getRequestAsString(String encoding) throws UnsupportedEncodingException { return new String(buffer, encoding); } }