List of usage examples for org.apache.commons.httpclient ChunkedInputStream read
public int read(byte[] paramArrayOfByte, int paramInt1, int paramInt2) throws IOException
From source file:org.mule.providers.http.HttpMessageReceiver.java
protected Object parseRequest(InputStream is, Properties p) throws IOException { RequestInputStream req = new RequestInputStream(is); Object payload = null;// w w w . ja va2 s.c o m String startLine = null; do { try { startLine = req.readline(); } catch (IOException e) { logger.debug(e.getMessage()); } if (startLine == null) return null; } while (startLine.trim().length() == 0); StringTokenizer tokenizer = new StringTokenizer(startLine); String method = tokenizer.nextToken(); String request = tokenizer.nextToken(); String httpVersion = tokenizer.nextToken(); p.setProperty(HttpConnector.HTTP_METHOD_PROPERTY, method); p.setProperty(HttpConnector.HTTP_REQUEST_PROPERTY, request); p.setProperty(HttpConnector.HTTP_VERSION_PROPERTY, httpVersion); // Read headers from the request as set them as properties on the event readHeaders(req, p); if (method.equals(HttpConstants.METHOD_GET)) { payload = request.getBytes(); } else { boolean multipart = p.getProperty(HttpConstants.HEADER_CONTENT_TYPE, "") .indexOf("multipart/related") > -1; String contentLengthHeader = p.getProperty(HttpConstants.HEADER_CONTENT_LENGTH, null); String chunkedString = PropertiesHelper.getStringProperty(p, HttpConstants.HEADER_TRANSFER_ENCODING, null); boolean chunked = "chunked".equalsIgnoreCase(chunkedString); if (contentLengthHeader == null && !chunked) { throw new IllegalStateException(HttpConstants.HEADER_CONTENT_LENGTH + " header must be set"); } if (chunked) { byte[] buffer = new byte[1024 * 32]; int totalLength = 0; int length = 0; ChunkedInputStream cis = new ChunkedInputStream(req); ByteArrayOutputStream baos = new ByteArrayOutputStream(); //ast: change the chunked method to avoid original mule limitation of 32768 bytes do { length = cis.read(buffer, 0, buffer.length); if (length >= 0) { baos.write(buffer, 0, length); totalLength += length; } } while (length >= 0); if ((length == -1) && (totalLength == 0)) { return null; } payload = baos.toByteArray(); } else { int contentLength = Integer.parseInt(contentLengthHeader); if (multipart) { byte[] buffer = new byte[1024]; payload = File.createTempFile("mime", ".att"); ((File) payload).deleteOnExit(); FileOutputStream os = new FileOutputStream((File) payload); int length = -1; int offset = 0; while (offset != contentLength) { buffer = new byte[1024]; length = is.read(buffer); if (length != -1) { os.write(buffer, 0, length); offset += length; } } os.close(); } else { byte[] buffer = new byte[contentLength]; int length = -1; int offset = req.read(buffer); while (offset >= 0 && offset < buffer.length) { length = req.read(buffer, offset, buffer.length - offset); if (length == -1) { break; } offset += length; } payload = buffer; } } } return payload; }