|
19 | 19 | import java.util.ArrayList; |
20 | 20 | import java.util.Base64; |
21 | 21 | import java.util.List; |
| 22 | +import java.util.Locale; |
22 | 23 | import java.util.Map; |
23 | 24 | import java.util.Properties; |
24 | 25 | import java.util.concurrent.CompletableFuture; |
@@ -174,7 +175,15 @@ private void setupSnowflakeS3Client( |
174 | 175 | if (this.stageEndPoint != null |
175 | 176 | && !this.stageEndPoint.isEmpty() |
176 | 177 | && !"null".equals(this.stageEndPoint)) { |
177 | | - clientBuilder.endpointOverride(resolveStageEndpointUriForOverride(this.stageEndPoint)); |
| 178 | + String endpointForOverride = this.stageEndPoint; |
| 179 | + String lower = endpointForOverride.toLowerCase(Locale.ROOT); |
| 180 | + if (!lower.startsWith("https://") && !lower.startsWith("http://")) { |
| 181 | + logger.debug( |
| 182 | + "AWS S3 Client: stage endpoint {} has no scheme, normalizing for URI creation.", |
| 183 | + this.stageEndPoint); |
| 184 | + endpointForOverride = "https://" + endpointForOverride; |
| 185 | + } |
| 186 | + clientBuilder.endpointOverride(URI.create(endpointForOverride)); |
178 | 187 | clientBuilder.region(region); |
179 | 188 | } else { |
180 | 189 | if (this.isUseS3RegionalUrl) { |
@@ -233,38 +242,6 @@ private void setupSnowflakeS3Client( |
233 | 242 | amazonClient = clientBuilder.build(); |
234 | 243 | } |
235 | 244 |
|
236 | | - /** |
237 | | - * Builds a {@link URI} for {@code endpointOverride} with a non-null scheme (required by AWS SDK |
238 | | - * v2). Uses {@link URI#getScheme()} and compares {@code http}/{@code https} case-insensitively |
239 | | - * per RFC 3986; bare hostnames get an {@code https://} prefix. |
240 | | - * |
241 | | - * <p>{@link URI#create(String)} only throws {@link IllegalArgumentException}, wrapping {@link |
242 | | - * java.net.URISyntaxException} when the string violates RFC 2396 / RFC 3986. |
243 | | - */ |
244 | | - private URI resolveStageEndpointUriForOverride(String raw) { |
245 | | - URI parsed; |
246 | | - try { |
247 | | - parsed = URI.create(raw); |
248 | | - } catch (IllegalArgumentException ex) { |
249 | | - logger.debug( |
250 | | - "AWS S3 Client: could not parse stage endpoint as URI; raw=\"" |
251 | | - + raw |
252 | | - + "\"; prefixing https://", |
253 | | - ex); |
254 | | - return URI.create("https://" + raw); |
255 | | - } |
256 | | - String scheme = parsed.getScheme(); |
257 | | - if (scheme == null || scheme.isEmpty()) { |
258 | | - logger.debug( |
259 | | - "AWS S3 Client: stage endpoint {} has no scheme, normalizing for URI creation.", raw); |
260 | | - return URI.create("https://" + raw); |
261 | | - } |
262 | | - if (scheme.equalsIgnoreCase("https") || scheme.equalsIgnoreCase("http")) { |
263 | | - return parsed; |
264 | | - } |
265 | | - return parsed; |
266 | | - } |
267 | | - |
268 | 245 | static String getDomainSuffixForRegionalUrl(String regionName) { |
269 | 246 | return regionName.toLowerCase().startsWith("cn-") ? "amazonaws.com.cn" : "amazonaws.com"; |
270 | 247 | } |
|
0 commit comments