S3Utilities.parseUri(): support unencoded URI
- Lingua principale
- Java
- Stelle
- 2.6k
- Fork
- 1k
- Merge medio
- 2g 9h
- PR unite (30g)
- 51
Descrizione
### 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
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia in services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Utilities.java, in S3Utilities.parseUri(), quindi traccia il modo in cui l’URI fornito viene letto nei suoi componenti bucket e key. Verifica il comportamento e i test esistenti di parseUri(), e considera completata la issue quando è possibile analizzare un URI S3 contenente spazi non codificati, mantenendo intatta la gestione esistente degli URI.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- aws, java
- Ambito
- cloud
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 35/100