S3Utilities.parseUri(): support unencoded URI
- Lenguaje dominante
- Java
- Estrellas
- 2.6k
- Forks
- 1k
- Merge medio
- 2 d 9 h
- PR fusionados (30 d)
- 51
Descripción
### 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
Guía de contribución
Línea de trabajo
Comienza en services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Utilities.java, en S3Utilities.parseUri(), y luego sigue cómo se lee la URI proporcionada en sus componentes de bucket y key. Confirma el comportamiento y las pruebas existentes de parseUri(), y considera resuelto el issue cuando se pueda analizar una URI de S3 que contenga espacios sin codificar, mientras se mantiene intacto el manejo existente de URI.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- aws, java
- Área
- cloud
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 35/100