diff --git a/temporal-sdk/src/main/java/io/temporal/common/converter/PayloadValidationException.java b/temporal-sdk/src/main/java/io/temporal/common/converter/PayloadValidationException.java index 459c2a413..1b8095179 100644 --- a/temporal-sdk/src/main/java/io/temporal/common/converter/PayloadValidationException.java +++ b/temporal-sdk/src/main/java/io/temporal/common/converter/PayloadValidationException.java @@ -12,12 +12,15 @@ private PayloadValidationException() {} /** * Creates a non-retryable failure containing payload validation details. * - *

The details are stored as a single value and serialized by the configured {@link - * DataConverter}. + *

Non-null details are stored as a single value and serialized by the configured {@link + * DataConverter}. If details are null, the failure has no detail values. * * @param details payload validation details */ public static ApplicationFailure newPayloadValidationException(Object details) { + if (details == null) { + return ApplicationFailure.newNonRetryableFailure(MESSAGE, TYPE); + } return ApplicationFailure.newNonRetryableFailure(MESSAGE, TYPE, details); } } diff --git a/temporal-sdk/src/test/java/io/temporal/common/converter/PayloadValidationExceptionTest.java b/temporal-sdk/src/test/java/io/temporal/common/converter/PayloadValidationExceptionTest.java index bca471d72..0c8b592bc 100644 --- a/temporal-sdk/src/test/java/io/temporal/common/converter/PayloadValidationExceptionTest.java +++ b/temporal-sdk/src/test/java/io/temporal/common/converter/PayloadValidationExceptionTest.java @@ -12,6 +12,18 @@ import org.junit.Test; public class PayloadValidationExceptionTest { + @Test + public void newPayloadValidationExceptionWithNullDetailsHasNoDetails() { + ApplicationFailure applicationFailure = + PayloadValidationException.newPayloadValidationException(null); + + assertEquals(0, applicationFailure.getDetails().getSize()); + + DataConverter dataConverter = DefaultDataConverter.STANDARD_INSTANCE; + Failure encodedFailure = dataConverter.exceptionToFailure(applicationFailure); + assertEquals(0, encodedFailure.getApplicationFailureInfo().getDetails().getPayloadsCount()); + } + @Test public void newPayloadValidationExceptionReturnsNonRetryableApplicationFailureWithEncodedDetails() {