Skip to content

Commit 1b21f02

Browse files
authored
Migration Tool - PutObjectRequest setters (#6001)
* Migration Tool - PutObjectRequest unsupported setters * Remove auto formatting for multiple comments * Add type check for ObjectMetadata arg
1 parent 8cf1bee commit 1b21f02

File tree

11 files changed

+201
-51
lines changed

11 files changed

+201
-51
lines changed

test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven-nocompile/after/src/main/java/foo/bar/S3Transforms.java

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@
1616
package foo.bar;
1717

1818
import com.amazonaws.HttpMethod;
19+
import com.amazonaws.services.s3.model.SSEAwsKeyManagementParams;
20+
import com.amazonaws.services.s3.model.SSECustomerKey;
1921
import java.io.ByteArrayInputStream;
2022
import java.io.InputStream;
2123
import java.net.URL;
2224
import java.util.Date;
2325
import software.amazon.awssdk.core.async.AsyncRequestBody;
2426
import software.amazon.awssdk.services.s3.S3Client;
27+
import software.amazon.awssdk.services.s3.model.AccessControlPolicy;
2528
import software.amazon.awssdk.services.s3.model.GeneratePresignedUrlRequest;
2629
import software.amazon.awssdk.services.s3.model.HeadObjectResponse;
2730
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
@@ -32,33 +35,49 @@ public class S3Transforms {
3235

3336
void upload_streamWithLiteralLength(S3TransferManager tm, String bucket, String key) {
3437
HeadObjectResponse metadata = HeadObjectResponse.builder()
35-
.build();
38+
.build();
3639
InputStream inputStream = new ByteArrayInputStream(("HelloWorld").getBytes());
3740
PutObjectRequest requestWithStreamAndLiteralLength = PutObjectRequest.builder().bucket(bucket).key(key).websiteRedirectLocation("location").contentLength(333L)
38-
.build();
41+
.build();
3942
/*AWS SDK for Java v2 migration: When using InputStream to upload with TransferManager, you must specify Content-Length and ExecutorService.*/tm.upload(UploadRequest.builder().putObjectRequest(requestWithStreamAndLiteralLength).requestBody(AsyncRequestBody.fromInputStream(inputStream, 333, newExecutorServiceVariableToDefine)).build());
4043
}
4144

4245
void upload_streamWithAssignedLength(S3TransferManager tm, String bucket, String key) {
4346
HeadObjectResponse metadata = HeadObjectResponse.builder()
44-
.build();
47+
.build();
4548
long contentLen = 777;
4649
InputStream inputStream = new ByteArrayInputStream(("HelloWorld").getBytes());
4750
PutObjectRequest requestWithStreamAndAssignedLength = PutObjectRequest.builder().bucket(bucket).key(key).websiteRedirectLocation("location").contentLength(contentLen)
48-
.build();
51+
.build();
4952
/*AWS SDK for Java v2 migration: When using InputStream to upload with TransferManager, you must specify Content-Length and ExecutorService.*/tm.upload(UploadRequest.builder().putObjectRequest(requestWithStreamAndAssignedLength).requestBody(AsyncRequestBody.fromInputStream(inputStream, contentLen, newExecutorServiceVariableToDefine)).build());
5053
}
5154

5255
void upload_streamWithoutLength(S3TransferManager tm, String bucket, String key) {
5356
InputStream inputStream = new ByteArrayInputStream(("HelloWorld").getBytes());
5457
PutObjectRequest requestWithStreamAndNoLength = PutObjectRequest.builder().bucket(bucket).key(key).websiteRedirectLocation("location")
55-
.build();
58+
.build();
5659
/*AWS SDK for Java v2 migration: When using InputStream to upload with TransferManager, you must specify Content-Length and ExecutorService.*/tm.upload(UploadRequest.builder().putObjectRequest(requestWithStreamAndNoLength).requestBody(AsyncRequestBody.fromInputStream(inputStream, -1L, newExecutorServiceVariableToDefine)).build());
5760
}
5861

62+
void putObjectRequest_unsupportedSetters() {
63+
SSECustomerKey sseCustomerKey = new SSECustomerKey("val");
64+
SSEAwsKeyManagementParams sseParams = new SSEAwsKeyManagementParams();
65+
AccessControlPolicy accessControlList = AccessControlPolicy.builder()
66+
.build();
67+
68+
PutObjectRequest request = /*AWS SDK for Java v2 migration: Transform for PutObjectRequest setter accessControlList is not supported, please manually migrate your code to use the v2 setters: acl, grantReadACP, grantWriteACP - https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/model/PutObjectRequest.Builder.html#acl(java.lang.String)*/
69+
/*AWS SDK for Java v2 migration: Transform for PutObjectRequest setter sseCustomerKey is not supported, please manually migrate your code to use the v2 setters: sseCustomerKey, sseCustomerKeyMD5 - https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/model/PutObjectRequest.Builder.html#sseCustomerKey(java.lang.String)*/
70+
/*AWS SDK for Java v2 migration: Transform for PutObjectRequest setter sseAwsKeyManagementParam is not supported, please manually migrate your code to use the v2 setters: ssekmsKeyId, serverSideEncryption, sseCustomerAlgorithm - https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/model/PutObjectRequest.Builder.html#ssekmsKeyId(java.lang.String)*/
71+
PutObjectRequest.builder().bucket("bucket").key("key").websiteRedirectLocation("location")
72+
.sseCustomerKey(sseCustomerKey)
73+
.sseAwsKeyManagementParams(sseParams)
74+
.accessControlList(accessControlList)
75+
.build();
76+
}
77+
5978
void objectmetadata_unsupportedSetters(Date dateVal) {
6079
HeadObjectResponse metadata = HeadObjectResponse.builder()
61-
.build();
80+
.build();
6281

6382
/*AWS SDK for Java v2 migration: Transform for ObjectMetadata setter - expirationTimeRuleId - is not supported, please manually migrate the code by setting it on the v2 request/response object.*/metadata.expirationTimeRuleId("expirationTimeRuleId");
6483
/*AWS SDK for Java v2 migration: Transform for ObjectMetadata setter - ongoingRestore - is not supported, please manually migrate the code by setting it on the v2 request/response object.*/metadata.ongoingRestore(false);

test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven-nocompile/before/src/main/java/foo/bar/S3Transforms.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@
1717

1818
import com.amazonaws.HttpMethod;
1919
import com.amazonaws.services.s3.AmazonS3;
20+
import com.amazonaws.services.s3.model.AccessControlList;
2021
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
2122
import com.amazonaws.services.s3.model.ObjectMetadata;
2223
import com.amazonaws.services.s3.model.PutObjectRequest;
24+
import com.amazonaws.services.s3.model.SSEAwsKeyManagementParams;
25+
import com.amazonaws.services.s3.model.SSECustomerKey;
2326
import com.amazonaws.services.s3.transfer.TransferManager;
2427
import java.io.ByteArrayInputStream;
2528
import java.io.InputStream;
@@ -54,6 +57,17 @@ void upload_streamWithoutLength(TransferManager tm, String bucket, String key) {
5457
tm.upload(requestWithStreamAndNoLength);
5558
}
5659

60+
void putObjectRequest_unsupportedSetters() {
61+
SSECustomerKey sseCustomerKey = new SSECustomerKey("val");
62+
SSEAwsKeyManagementParams sseParams = new SSEAwsKeyManagementParams();
63+
AccessControlList accessControlList = new AccessControlList();
64+
65+
PutObjectRequest request = new PutObjectRequest("bucket", "key", "location")
66+
.withSSECustomerKey(sseCustomerKey)
67+
.withSSEAwsKeyManagementParams(sseParams)
68+
.withAccessControlList(accessControlList);
69+
}
70+
5771
void objectmetadata_unsupportedSetters(Date dateVal) {
5872
ObjectMetadata metadata = new ObjectMetadata();
5973

test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -409,22 +409,26 @@ private void s3Uri(URI uri, String uriAsString) {
409409
}
410410

411411
private void generatePresignedUrl(S3Client s3, String bucket, String key, Date expiration) {
412-
URL urlGet1 = /*AWS SDK for Java v2 migration: If generating multiple pre-signed URLs, it is recommended to create a single instance of S3Presigner, since creating a presigner can be expensive. If applicable, please manually refactor the transformed code.*/S3Presigner.builder().s3Client(s3).build()
412+
URL urlGet1 = /*AWS SDK for Java v2 migration: If generating multiple pre-signed URLs, it is recommended to create a single instance of S3Presigner, since creating a presigner can be expensive. If applicable, please manually refactor the transformed code.*/
413+
S3Presigner.builder().s3Client(s3).build()
413414
.presignGetObject(p -> p.getObjectRequest(r -> r.bucket(bucket).key(key))
414415
.signatureDuration(Duration.between(Instant.now(), expiration.toInstant())))
415416
.url();
416417

417-
URL urlPut = /*AWS SDK for Java v2 migration: If generating multiple pre-signed URLs, it is recommended to create a single instance of S3Presigner, since creating a presigner can be expensive. If applicable, please manually refactor the transformed code.*/S3Presigner.builder().s3Client(s3).build()
418+
URL urlPut = /*AWS SDK for Java v2 migration: If generating multiple pre-signed URLs, it is recommended to create a single instance of S3Presigner, since creating a presigner can be expensive. If applicable, please manually refactor the transformed code.*/
419+
S3Presigner.builder().s3Client(s3).build()
418420
.presignPutObject(p -> p.putObjectRequest(r -> r.bucket(bucket).key(key))
419421
.signatureDuration(Duration.between(Instant.now(), expiration.toInstant())))
420422
.url();
421423

422-
URL urlGet2 = /*AWS SDK for Java v2 migration: If generating multiple pre-signed URLs, it is recommended to create a single instance of S3Presigner, since creating a presigner can be expensive. If applicable, please manually refactor the transformed code.*/S3Presigner.builder().s3Client(s3).build()
424+
URL urlGet2 = /*AWS SDK for Java v2 migration: If generating multiple pre-signed URLs, it is recommended to create a single instance of S3Presigner, since creating a presigner can be expensive. If applicable, please manually refactor the transformed code.*/
425+
S3Presigner.builder().s3Client(s3).build()
423426
.presignGetObject(p -> p.getObjectRequest(r -> r.bucket(bucket).key(key))
424427
.signatureDuration(Duration.between(Instant.now(), expiration.toInstant())))
425428
.url();
426429

427-
URL urlDelete = /*AWS SDK for Java v2 migration: If generating multiple pre-signed URLs, it is recommended to create a single instance of S3Presigner, since creating a presigner can be expensive. If applicable, please manually refactor the transformed code.*/S3Presigner.builder().s3Client(s3).build()
430+
URL urlDelete = /*AWS SDK for Java v2 migration: If generating multiple pre-signed URLs, it is recommended to create a single instance of S3Presigner, since creating a presigner can be expensive. If applicable, please manually refactor the transformed code.*/
431+
S3Presigner.builder().s3Client(s3).build()
428432
.presignDeleteObject(p -> p.deleteObjectRequest(r -> r.bucket(bucket).key(key))
429433
.signatureDuration(Duration.between(Instant.now(), expiration.toInstant())))
430434
.url();

test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/after/src/main/java/foo/bar/S3Streaming.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
import java.io.ByteArrayInputStream;
1919
import java.io.File;
2020
import java.io.InputStream;
21+
import java.util.ArrayList;
2122
import java.util.Date;
2223
import java.util.HashMap;
24+
import java.util.List;
2325
import java.util.Map;
2426
import software.amazon.awssdk.core.ResponseInputStream;
2527
import software.amazon.awssdk.core.sync.RequestBody;
@@ -30,6 +32,8 @@
3032
import software.amazon.awssdk.services.s3.model.ObjectCannedACL;
3133
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
3234
import software.amazon.awssdk.services.s3.model.RequestPayer;
35+
import software.amazon.awssdk.services.s3.model.Tag;
36+
import software.amazon.awssdk.services.s3.model.Tagging;
3337

3438
public class S3Streaming {
3539

@@ -61,6 +65,8 @@ void putObject_bucketKeyStreamMetadata(String bucket, String key, InputStream st
6165
HeadObjectResponse metadataWithoutLength = HeadObjectResponse.builder()
6266
.build();
6367
/*AWS SDK for Java v2 migration: When using InputStream to upload with S3Client, Content-Length should be specified and used with RequestBody.fromInputStream(). Otherwise, the entire stream will be buffered in memory. If content length must be unknown, we recommend using the CRT-based S3 client - https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/crt-based-s3-client.html*/s3.putObject(PutObjectRequest.builder().bucket(bucket).key(key).build(), RequestBody.fromContentProvider(() -> stream, "application/octet-stream"));
68+
69+
/*AWS SDK for Java v2 migration: When using InputStream to upload with S3Client, Content-Length should be specified and used with RequestBody.fromInputStream(). Otherwise, the entire stream will be buffered in memory. If content length must be unknown, we recommend using the CRT-based S3 client - https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/crt-based-s3-client.html*/s3.putObject(PutObjectRequest.builder().bucket("bucket").key("key").build(), RequestBody.fromContentProvider(() -> stream, "application/octet-stream"));
6470
}
6571

6672
/**
@@ -108,10 +114,16 @@ void putObject_requestPojoWithoutPayload(String bucket, String key) {
108114

109115

110116
void putObjectSetters() {
117+
List<Tag> tags = new ArrayList<>();
118+
Tagging objectTagging = Tagging.builder().tagSet(tags)
119+
.build();
120+
111121
PutObjectRequest putObjectRequest =
112122
PutObjectRequest.builder().bucket("bucket").key("key").websiteRedirectLocation("location")
113123
.bucket("bucketName")
124+
.websiteRedirectLocation("redirectLocation")
114125
.acl(ObjectCannedACL.AWS_EXEC_READ)
126+
.tagging(objectTagging)
115127
.build();
116128
}
117129

@@ -160,7 +172,7 @@ void putObjectRequest_withMetadata() {
160172
.build();
161173
}
162174

163-
void putObjectRequester_emptyMetadata() {
175+
void putObjectRequest_emptyMetadata() {
164176
HeadObjectResponse emptyMetadata1 = HeadObjectResponse.builder()
165177
.build();
166178
PutObjectRequest request1 =PutObjectRequest.builder().bucket("bucket").key("key").websiteRedirectLocation("location")

test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven/before/src/main/java/foo/bar/S3Streaming.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,17 @@
1919
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
2020
import com.amazonaws.services.s3.model.CannedAccessControlList;
2121
import com.amazonaws.services.s3.model.ObjectMetadata;
22+
import com.amazonaws.services.s3.model.ObjectTagging;
2223
import com.amazonaws.services.s3.model.PutObjectRequest;
2324
import com.amazonaws.services.s3.model.S3Object;
25+
import com.amazonaws.services.s3.model.Tag;
2426
import java.io.ByteArrayInputStream;
2527
import java.io.File;
2628
import java.io.InputStream;
29+
import java.util.ArrayList;
2730
import java.util.Date;
2831
import java.util.HashMap;
32+
import java.util.List;
2933
import java.util.Map;
3034

3135
public class S3Streaming {
@@ -53,6 +57,8 @@ void putObject_bucketKeyStreamMetadata(String bucket, String key, InputStream st
5357

5458
ObjectMetadata metadataWithoutLength = new ObjectMetadata();
5559
s3.putObject(bucket, key, stream, metadataWithoutLength);
60+
61+
s3.putObject("bucket", "key", stream, new ObjectMetadata());
5662
}
5763

5864
/**
@@ -95,10 +101,15 @@ void putObject_requestPojoWithoutPayload(String bucket, String key) {
95101

96102

97103
void putObjectSetters() {
104+
List<Tag> tags = new ArrayList<>();
105+
ObjectTagging objectTagging = new ObjectTagging(tags);
106+
98107
PutObjectRequest putObjectRequest =
99108
new PutObjectRequest("bucket", "key", "location")
100-
.withBucketName("bucketName")
101-
.withCannedAcl(CannedAccessControlList.AwsExecRead);
109+
.withBucketName("bucketName")
110+
.withRedirectLocation("redirectLocation")
111+
.withCannedAcl(CannedAccessControlList.AwsExecRead)
112+
.withTagging(objectTagging);
102113
}
103114

104115
void putObjectRequesterPaysSetter() {
@@ -141,7 +152,7 @@ void putObjectRequest_withMetadata() {
141152
PutObjectRequest request = new PutObjectRequest("bucket", "key", "location").withMetadata(metadata);
142153
}
143154

144-
void putObjectRequester_emptyMetadata() {
155+
void putObjectRequest_emptyMetadata() {
145156
ObjectMetadata emptyMetadata1 = new ObjectMetadata();
146157
PutObjectRequest request1 = new PutObjectRequest("bucket", "key", "location").withMetadata(emptyMetadata1);
147158

0 commit comments

Comments
 (0)