public Observable<FullHttpRequest> toFullHttpRequest(int maxContentBytes) { CompositeByteBuf byteBufs = compositeBuffer(); return body .lift(disableFlowControl()) .doOnError(e -> byteBufs.release()) .collect(() -> byteBufs, (composite, part) -> { long newSize = composite.readableBytes() + part.readableBytes(); if (newSize > maxContentBytes) { release(composite); release(part); throw new ContentOverflowException(format("Maximum content size exceeded. Maximum size allowed is %d bytes.", maxContentBytes)); } composite.addComponent(part); composite.writerIndex(composite.writerIndex() + part.readableBytes()); }) .map(StreamingHttpRequest::decodeAndRelease) .map(decoded -> new FullHttpRequest.Builder(this, decoded).build()); }