aws / aws/aws-sdk-java-v2

S3Utilities.parseUri(): support unencoded URI

Ouverte
#3,955 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
feature-request p2
Langage dominant
Java
Étoiles
2.6k
Forks
1k
Merge moyen
2 j 9 h
PR mergées (30 j)
51

Description

### Describe the bug

I currently have an S3 object with the S3 URI `s3://test-bucket/test file with spaces`. When I attempt to create an `S3Uri` object with the `parseUri()` method ([code](https://github.com/aws/aws-sdk-java-v2/blob/b0f57372dbe6be1fb2a6a54b05ad1f1a7e1e7700/services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Utilities.java#L292)), I receive the following exception:

```kotlin
// Code with S3 client from v2 SDK
val s3Uri = s3Client.utilities().parseUri(URI("s3://test-bucket/test file with spaces"))

// Exception
Caused by: java.net.URISyntaxException: Illegal character in path at index 21: s3://test-bucket/test file with spaces
at java.net.URI$Parser.fail (:-1)
at java.net.URI$Parser.checkChars (:-1)
at java.net.URI$Parser.parseHierarchical (:-1)
```

This is due to the URI constructor, specifically because it does not allow input strings to have spaces in them. However, valid S3 URIs can contain spaces in them.

### Expected Behavior

```kotlin
// Code
val s3Uri = s3Client.utilities().parseUri(URI("s3://test-bucket/test file with spaces"))
println(s3Uri) // S3Uri(uri=s3://test-bucket/test file with spaces, bucket=test-bucket, key=test file with spaces, isPathStyle=false, queryParams={})
```

### Current Behavior

```kotlin
// Code with S3 client from v2 SDK
val s3Uri = s3Client.utilities().parseUri(URI("s3://test-bucket/test file with spaces"))

// Exception
Caused by: java.net.URISyntaxException: Illegal character in path at index 21: s3://test-bucket/test file with spaces
at java.net.URI$Parser.fail (:-1)
at java.net.URI$Parser.checkChars (:-1)
at java.net.URI$Parser.parseHierarchical (:-1)
```

### Reproduction Steps

```kotlin
val s3Uri = s3Client.utilities().parseUri(URI("s3://test-bucket/test file with spaces"))
```

### Possible Solution

_No response_

### Additional Information/Context

_No response_

### AWS Java SDK version used

2.0

### JDK version used

8

### Operating System and version

macOS 12.6.5

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez dans services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Utilities.java, au niveau de S3Utilities.parseUri(), puis suivez la manière dont l’URI fournie est lue dans ses composants bucket et key. Confirmez le comportement et les tests existants de parseUri(), et considérez l’issue comme terminée lorsqu’une URI S3 contenant des espaces non encodés peut être analysée, tout en préservant la gestion existante des URI.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
aws, java
Domaine
cloud
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.