docs: private <X extends AmazonWebServiceRequest> Request<X> createRequestForPresignedUrl(X originalRequest,
                                                                                          HttpMethodName httpMethod,
                                                                                          URL endpoint) {
          Request<X> request = new DefaultRequest<X>(originalRequest, Constants.S3_SERVICE_DISPLAY_NAME);
          request.setHttpMethod(httpMethod);
  
          try {
              request.setEndpoint(endpoint.toURI());
          } catch (URISyntaxException e) {
              throw new SdkClientException(e);
          }
  
          if (originalRequest.getCustomRequestHeaders() != null) {
              for (Map.Entry<String, String> entry : originalRequest.getCustomRequestHeaders().entrySet()) {
                  request.addHeader(entry.getKey(), entry.getValue());
              }
          }
  
          // Content-Type is signed in SigV2 signer
          // If no Content-Type is present, SDK puts a default type in Apache http layer, which will make the call fail with
          // Signature error. So set it to empty string for sigv2 presigned urls when user don't provide a Content-Type value
          if (request.getHeaders().get(Headers.CONTENT_TYPE) == null && isSigV2PresignedUrl(endpoint)) {
              request.addHeader(Headers.CONTENT_TYPE, "");
          }
  
          request.addHandlerContext(S3HandlerContextKeys.IS_CHUNKED_ENCODING_DISABLED,
                                    Boolean.valueOf(clientOptions.isChunkedEncodingDisabled()));
          request.addHandlerContext(S3HandlerContextKeys.IS_PAYLOAD_SIGNING_ENABLED,
                                    Boolean.valueOf(clientOptions.isPayloadSigningEnabled()));
          request.addHandlerContext(HandlerContextKey.SERVICE_ID, SERVICE_ID);
  
          return request;
      }