From 39456ce6053f2309438b868338911c8f59ef7854 Mon Sep 17 00:00:00 2001 From: RanVaknin <50976344+RanVaknin@users.noreply.github.com> Date: Thu, 19 Mar 2026 00:14:16 -0700 Subject: [PATCH 1/3] Skip null non required fields in JsonProtocolMarshaller.doMarshall --- .../json/internal/marshall/JsonProtocolMarshaller.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java b/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java index eaa6c2ef5cd5..57db62d81e73 100644 --- a/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java +++ b/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java @@ -35,6 +35,7 @@ import software.amazon.awssdk.core.protocol.MarshallLocation; import software.amazon.awssdk.core.protocol.MarshallingType; import software.amazon.awssdk.core.traits.PayloadTrait; +import software.amazon.awssdk.core.traits.RequiredTrait; import software.amazon.awssdk.core.traits.TimestampFormatTrait; import software.amazon.awssdk.core.traits.TraitType; import software.amazon.awssdk.http.SdkHttpFullRequest; @@ -212,8 +213,13 @@ void doMarshall(SdkPojo pojo) { } } else if (isExplicitPayloadMember(field)) { marshallExplicitJsonPayload(field, val); - } else { + } else if (val != null) { marshallField(field, val); + } else if (field.containsTrait(RequiredTrait.class, + TraitType.REQUIRED_TRAIT)) { + throw new IllegalArgumentException( + String.format("Parameter '%s' must not be null", + field.locationName())); } } } From 1626e1b4ce2620628089716b0077d58c4449d89d Mon Sep 17 00:00:00 2001 From: RanVaknin <50976344+RanVaknin@users.noreply.github.com> Date: Fri, 20 Mar 2026 10:29:46 -0700 Subject: [PATCH 2/3] Fix domarshall logic --- .../internal/marshall/JsonProtocolMarshaller.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java b/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java index 57db62d81e73..7bf7738a8563 100644 --- a/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java +++ b/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java @@ -215,11 +215,14 @@ void doMarshall(SdkPojo pojo) { marshallExplicitJsonPayload(field, val); } else if (val != null) { marshallField(field, val); - } else if (field.containsTrait(RequiredTrait.class, - TraitType.REQUIRED_TRAIT)) { - throw new IllegalArgumentException( - String.format("Parameter '%s' must not be null", - field.locationName())); + } else if (field.location() == MarshallLocation.PAYLOAD) { + if (field.containsTrait(RequiredTrait.class, TraitType.REQUIRED_TRAIT)) { + throw new IllegalArgumentException( + String.format("Parameter '%s' must not be null", + field.locationName())); + } + } else { + marshallField(field, val); } } } From f9e4340b2546405d6f9c9dfeba4c73af5c153b40 Mon Sep 17 00:00:00 2001 From: RanVaknin <50976344+RanVaknin@users.noreply.github.com> Date: Fri, 20 Mar 2026 12:42:27 -0700 Subject: [PATCH 3/3] Fix logic, add null suppression --- .../amazon/awssdk/spotbugs-suppressions.xml | 8 ++++++++ .../internal/marshall/JsonProtocolMarshaller.java | 13 ++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/build-tools/src/main/resources/software/amazon/awssdk/spotbugs-suppressions.xml b/build-tools/src/main/resources/software/amazon/awssdk/spotbugs-suppressions.xml index 6871e760a793..16c9254404a1 100644 --- a/build-tools/src/main/resources/software/amazon/awssdk/spotbugs-suppressions.xml +++ b/build-tools/src/main/resources/software/amazon/awssdk/spotbugs-suppressions.xml @@ -523,4 +523,12 @@ + + + + + + + diff --git a/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java b/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java index 7bf7738a8563..427ae3779b13 100644 --- a/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java +++ b/core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/internal/marshall/JsonProtocolMarshaller.java @@ -215,14 +215,13 @@ void doMarshall(SdkPojo pojo) { marshallExplicitJsonPayload(field, val); } else if (val != null) { marshallField(field, val); - } else if (field.location() == MarshallLocation.PAYLOAD) { - if (field.containsTrait(RequiredTrait.class, TraitType.REQUIRED_TRAIT)) { - throw new IllegalArgumentException( - String.format("Parameter '%s' must not be null", - field.locationName())); - } - } else { + } else if (field.location() != MarshallLocation.PAYLOAD) { marshallField(field, val); + } else if (field.containsTrait(RequiredTrait.class, + TraitType.REQUIRED_TRAIT)) { + throw new IllegalArgumentException( + String.format("Parameter '%s' must not be null", + field.locationName())); } } }