Skip to content

Commit 04136c4

Browse files
committed
change the validation condition to only check if the set field is different than the value in target pojo
1 parent c103284 commit 04136c4

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/multipart/SdkPojoConversionUtils.java

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ private SdkPojoConversionUtils() {
151151
public static UploadPartRequest toUploadPartRequest(PutObjectRequest putObjectRequest, int partNumber, String uploadId) {
152152

153153
UploadPartRequest.Builder builder = UploadPartRequest.builder();
154-
validateRequestFields(putObjectRequest, PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS);
154+
validateRequestFields(putObjectRequest, builder, PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS);
155155
setSdkFields(builder, putObjectRequest, PUT_OBJECT_REQUEST_TO_UPLOAD_PART_FIELDS_TO_IGNORE);
156156
return builder.uploadId(uploadId).partNumber(partNumber).build();
157157
}
@@ -160,7 +160,7 @@ public static CompleteMultipartUploadRequest toCompleteMultipartUploadRequest(Pu
160160
String uploadId, CompletedPart[] parts,
161161
long contentLength) {
162162
CompleteMultipartUploadRequest.Builder builder = CompleteMultipartUploadRequest.builder();
163-
validateRequestFields(putObjectRequest, PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS);
163+
validateRequestFields(putObjectRequest, builder, PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS);
164164
setSdkFields(builder, putObjectRequest);
165165

166166
builder.mpuObjectSize(contentLength);
@@ -175,7 +175,7 @@ public static CompleteMultipartUploadRequest toCompleteMultipartUploadRequest(Pu
175175
public static CreateMultipartUploadRequest toCreateMultipartUploadRequest(PutObjectRequest putObjectRequest) {
176176

177177
CreateMultipartUploadRequest.Builder builder = CreateMultipartUploadRequest.builder();
178-
validateRequestFields(putObjectRequest, PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS);
178+
validateRequestFields(putObjectRequest, builder, PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS);
179179
setSdkFields(builder, putObjectRequest);
180180

181181
if (S3ChecksumUtils.checksumValueSpecified(putObjectRequest)) {
@@ -225,14 +225,14 @@ public static CompletedPart toCompletedPart(Part part) {
225225

226226
public static ListPartsRequest toListPartsRequest(String uploadId, PutObjectRequest putObjectRequest) {
227227
ListPartsRequest.Builder builder = ListPartsRequest.builder();
228-
validateRequestFields(putObjectRequest, PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS);
228+
validateRequestFields(putObjectRequest, builder, PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS);
229229
setSdkFields(builder, putObjectRequest);
230230
return builder.uploadId(uploadId).build();
231231
}
232232

233233
public static CreateMultipartUploadRequest toCreateMultipartUploadRequest(CopyObjectRequest copyObjectRequest) {
234234
CreateMultipartUploadRequest.Builder builder = CreateMultipartUploadRequest.builder();
235-
validateRequestFields(copyObjectRequest, COPY_OBJECT_TO_COPY_OBJECT_ALLOWED_FIELDS);
235+
validateRequestFields(copyObjectRequest, builder, COPY_OBJECT_TO_COPY_OBJECT_ALLOWED_FIELDS);
236236
setSdkFields(builder, copyObjectRequest);
237237
builder.bucket(copyObjectRequest.destinationBucket());
238238
builder.key(copyObjectRequest.destinationKey());
@@ -260,7 +260,7 @@ private static CopyObjectResult toCopyObjectResult(CompleteMultipartUploadRespon
260260

261261
public static AbortMultipartUploadRequest.Builder toAbortMultipartUploadRequest(CopyObjectRequest copyObjectRequest) {
262262
AbortMultipartUploadRequest.Builder builder = AbortMultipartUploadRequest.builder();
263-
validateRequestFields(copyObjectRequest, COPY_OBJECT_TO_COPY_OBJECT_ALLOWED_FIELDS);
263+
validateRequestFields(copyObjectRequest, builder, COPY_OBJECT_TO_COPY_OBJECT_ALLOWED_FIELDS);
264264
setSdkFields(builder, copyObjectRequest);
265265
builder.bucket(copyObjectRequest.destinationBucket());
266266
builder.key(copyObjectRequest.destinationKey());
@@ -269,7 +269,7 @@ public static AbortMultipartUploadRequest.Builder toAbortMultipartUploadRequest(
269269

270270
public static AbortMultipartUploadRequest.Builder toAbortMultipartUploadRequest(PutObjectRequest putObjectRequest) {
271271
AbortMultipartUploadRequest.Builder builder = AbortMultipartUploadRequest.builder();
272-
validateRequestFields(putObjectRequest, PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS);
272+
validateRequestFields(putObjectRequest, builder, PUT_OBJECT_TO_UPLOAD_PART_ALLOWED_FIELDS);
273273
setSdkFields(builder, putObjectRequest);
274274
return builder;
275275
}
@@ -324,15 +324,22 @@ private static void setSdkFields(SdkPojo targetBuilder, SdkPojo sourceObject, Se
324324
}
325325
}
326326

327-
private static void validateRequestFields(SdkPojo sourceObject, Set<String> allowedFields) {
327+
private static void validateRequestFields(SdkPojo sourceObject, SdkPojo targetBuilder, Set<String> allowedFields) {
328328
Set<String> invalidFields = new HashSet<>();
329329

330330
for (SdkField<?> sourceField : sourceObject.sdkFields()) {
331331
String fieldName = sourceField.memberName();
332-
Object rawValue = sourceField.getValueOrDefault(sourceObject);
333-
334-
if (rawValue != null && !allowedFields.contains(fieldName)) {
335-
invalidFields.add(fieldName);
332+
Object sourceValue = sourceField.getValueOrDefault(sourceObject);
333+
334+
if (!allowedFields.contains(fieldName)) {
335+
SdkField<?> targetField = targetBuilder.sdkFields()
336+
.stream()
337+
.filter(field -> field.memberName().equals(fieldName))
338+
.findFirst()
339+
.orElse(null);
340+
if (targetField != null && !targetField.getValueOrDefault(targetBuilder).equals(sourceValue)) {
341+
invalidFields.add(fieldName);
342+
}
336343
}
337344
}
338345

0 commit comments

Comments
 (0)