@Override public UploadPartResponse apply(UploadPartRequest request) { InputStream stream = request.getUploadPartBody(); BmcException ex = null; for (int i = 1; i <= MAX_RETRIES; i++) { try { return service.uploadPart(request); } catch (BmcException e) { ex = e; if (canRetry(stream, e, i)) { request = UploadPartRequest.builder() .copy(request) .uploadPartBody( ((DuplicatableInputStream) stream).duplicate()) .build(); } else { break; } } } throw ex; } };