S3Utilities.parseUri(): support unencoded URI
- Ngôn ngữ chính
- Java
- Star
- 2.6k
- Fork
- 1k
- Merge trung bình
- 2 ngày 9 giờ
- Pull request đã merge (30 ngày)
- 51
Mô tả
### 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
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu tại services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Utilities.java, ở S3Utilities.parseUri(), sau đó theo dõi cách URI được cung cấp được đọc vào các thành phần bucket và key. Xác nhận hành vi và các bài kiểm thử hiện có của parseUri(), và coi issue là hoàn tất khi một URI S3 chứa các khoảng trắng chưa được mã hóa có thể được phân tích, đồng thời vẫn giữ nguyên cách xử lý URI hiện có.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- aws, java
- Lĩnh vực
- cloud
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 35/100