@Override
  protected void doHandle(RestRequest restRequest, RestResponseChannel restResponseChannel,
      Callback<R> callback) throws RestServiceException {
    if (isMultipartCreateUploadRequest(restRequest)) {
      createMultipartUploadHandler.handle(restRequest, restResponseChannel, callback);
    } else if (isMultipartUploadPartRequest(restRequest)) {
      uploadPartHandler.handle(restRequest, restResponseChannel, callback);
    } else if (isMultipartCompleteUploadRequest(restRequest)) {
      completeMultipartUploadHandler.handle(restRequest, restResponseChannel, callback);
    } else if (isMultipartListPartRequest(restRequest)) {
      listPartsHandler.handle(restRequest, restResponseChannel, callback);
    } else if(isMultipartAbortUploadRequest(restRequest)) {
      abortMultipartUploadHandler.handle(restRequest, restResponseChannel, callback);
    } else {
      callback.onCompletion(null,
          new RestServiceException("Invalid S3 Multipart request", RestServiceErrorCode.BadRequest));
    }
  }
@param restRequest the {@link RestRequest} that contains the request parameters.
@param restResponseChannel the {@link RestResponseChannel} where headers should be set.
@param callback the {@link Callback} to invoke when the response is ready (or if there is an exception).
@throws RestServiceException exception when the processing fails
ambry-frontend/src/main/java/com/github/ambry/frontend/s3/S3MultipartUploadHandler.java