2323import java .util .Objects ;
2424import java .util .Set ;
2525import software .amazon .awssdk .annotations .SdkInternalApi ;
26+ import software .amazon .awssdk .awscore .AwsRequest ;
2627import software .amazon .awssdk .core .SdkField ;
2728import software .amazon .awssdk .core .SdkPojo ;
2829import software .amazon .awssdk .core .exception .SdkClientException ;
@@ -164,6 +165,7 @@ public static UploadPartRequest toUploadPartRequest(PutObjectRequest putObjectRe
164165 UploadPartRequest .Builder builder = UploadPartRequest .builder ();
165166 validateRequestFields (putObjectRequest , builder .build (), PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS );
166167 setSdkFields (builder , putObjectRequest , PUT_OBJECT_REQUEST_TO_UPLOAD_PART_FIELDS_TO_IGNORE );
168+ propagateOverrideConfig (builder , putObjectRequest );
167169 return builder .uploadId (uploadId ).partNumber (partNumber ).build ();
168170 }
169171
@@ -175,6 +177,7 @@ public static CompleteMultipartUploadRequest toCompleteMultipartUploadRequest(Pu
175177 setSdkFields (builder , putObjectRequest );
176178
177179 builder .mpuObjectSize (contentLength );
180+ propagateOverrideConfig (builder , putObjectRequest );
178181
179182 if (S3ChecksumUtils .checksumValueSpecified (putObjectRequest )) {
180183 builder .checksumType (ChecksumType .FULL_OBJECT );
@@ -188,6 +191,7 @@ public static CreateMultipartUploadRequest toCreateMultipartUploadRequest(PutObj
188191 CreateMultipartUploadRequest .Builder builder = CreateMultipartUploadRequest .builder ();
189192 validateRequestFields (putObjectRequest , builder .build (), PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS );
190193 setSdkFields (builder , putObjectRequest );
194+ propagateOverrideConfig (builder , putObjectRequest );
191195
192196 if (S3ChecksumUtils .checksumValueSpecified (putObjectRequest )) {
193197 builder .checksumType (ChecksumType .FULL_OBJECT );
@@ -200,7 +204,7 @@ public static HeadObjectRequest toHeadObjectRequest(CopyObjectRequest copyObject
200204
201205 // We can't set SdkFields directly because the fields in CopyObjectRequest do not match 100% with the ones in
202206 // HeadObjectRequest
203- return HeadObjectRequest .builder ()
207+ HeadObjectRequest . Builder builder = HeadObjectRequest .builder ()
204208 .bucket (copyObjectRequest .sourceBucket ())
205209 .key (copyObjectRequest .sourceKey ())
206210 .versionId (copyObjectRequest .sourceVersionId ())
@@ -211,8 +215,9 @@ public static HeadObjectRequest toHeadObjectRequest(CopyObjectRequest copyObject
211215 .expectedBucketOwner (copyObjectRequest .expectedSourceBucketOwner ())
212216 .sseCustomerAlgorithm (copyObjectRequest .copySourceSSECustomerAlgorithm ())
213217 .sseCustomerKey (copyObjectRequest .copySourceSSECustomerKey ())
214- .sseCustomerKeyMD5 (copyObjectRequest .copySourceSSECustomerKeyMD5 ())
215- .build ();
218+ .sseCustomerKeyMD5 (copyObjectRequest .copySourceSSECustomerKeyMD5 ());
219+ propagateOverrideConfig (builder , copyObjectRequest );
220+ return builder .build ();
216221 }
217222
218223 public static CompletedPart toCompletedPart (CopyPartResult copyPartResult , int partNumber ) {
@@ -238,6 +243,7 @@ public static ListPartsRequest toListPartsRequest(String uploadId, PutObjectRequ
238243 ListPartsRequest .Builder builder = ListPartsRequest .builder ();
239244 validateRequestFields (putObjectRequest , builder .build (), PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS );
240245 setSdkFields (builder , putObjectRequest );
246+ propagateOverrideConfig (builder , putObjectRequest );
241247 return builder .uploadId (uploadId ).build ();
242248 }
243249
@@ -247,6 +253,7 @@ public static CreateMultipartUploadRequest toCreateMultipartUploadRequest(CopyOb
247253 setSdkFields (builder , copyObjectRequest );
248254 builder .bucket (copyObjectRequest .destinationBucket ());
249255 builder .key (copyObjectRequest .destinationKey ());
256+ propagateOverrideConfig (builder , copyObjectRequest );
250257 return builder .build ();
251258 }
252259
@@ -275,13 +282,15 @@ public static AbortMultipartUploadRequest.Builder toAbortMultipartUploadRequest(
275282 setSdkFields (builder , copyObjectRequest );
276283 builder .bucket (copyObjectRequest .destinationBucket ());
277284 builder .key (copyObjectRequest .destinationKey ());
285+ propagateOverrideConfig (builder , copyObjectRequest );
278286 return builder ;
279287 }
280288
281289 public static AbortMultipartUploadRequest .Builder toAbortMultipartUploadRequest (PutObjectRequest putObjectRequest ) {
282290 AbortMultipartUploadRequest .Builder builder = AbortMultipartUploadRequest .builder ();
283291 validateRequestFields (putObjectRequest , builder .build (), PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS );
284292 setSdkFields (builder , putObjectRequest );
293+ propagateOverrideConfig (builder , putObjectRequest );
285294 return builder ;
286295 }
287296
@@ -296,6 +305,7 @@ public static UploadPartCopyRequest toUploadPartCopyRequest(CopyObjectRequest co
296305 .uploadId (uploadId )
297306 .bucket (copyObjectRequest .destinationBucket ())
298307 .key (copyObjectRequest .destinationKey ())
308+ .overrideConfiguration (copyObjectRequest .overrideConfiguration ().orElse (null ))
299309 .build ();
300310 }
301311
@@ -311,6 +321,10 @@ public static PutObjectResponse toPutObjectResponse(CompleteMultipartUploadRespo
311321 return builder .build ();
312322 }
313323
324+ private static void propagateOverrideConfig (AwsRequest .Builder builder , AwsRequest source ) {
325+ source .overrideConfiguration ().ifPresent (builder ::overrideConfiguration );
326+ }
327+
314328 private static Map <String , Object > retrieveSdkFields (SdkPojo sourceObject , List <SdkField <?>> sdkFields ) {
315329 return sdkFields .stream ().collect (
316330 HashMap ::new ,
0 commit comments