@Override
  public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request)
      throws MultipartException {

    Assert.notNull(request, "Request must not be null");
    if (request instanceof RequestWrapper) {

      final RequestWrapper requestWrapper = (RequestWrapper) request;

      Exception multipartException =
          (Exception) request.getAttribute(IMultipartConfig.FILEUPLOAD_EXCEPTION);
      if (multipartException != null) {

        if (multipartException instanceof MaxUploadSizeExceededException) {
          throw (MaxUploadSizeExceededException) multipartException;
        } else {
          throw new MultipartException(
              "Could not parse multipart servlet request", multipartException);
        }
      }

      if (this.resolveLazily) {

        return new DefaultMultipartHttpServletRequest(requestWrapper) {
          @Override
          protected void initializeMultipart() {
            setMultipartFiles(getMultipartFileElements(requestWrapper.getFileElements()));
            setMultipartParameters(getMultipartTextElements(requestWrapper.getTextElements()));
          }
        };
      } else {
        return new DefaultMultipartHttpServletRequest(
            request,
            getMultipartFileElements(requestWrapper.getFileElements()),
            getMultipartTextElements(requestWrapper.getTextElements()));
      }
    } else {
      // The normal behaviour
      return super.resolveMultipart(request);
    }
  }