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()));
}
}
}