From 956c4fa279a1dc18eacd35c66d50577278a4efad Mon Sep 17 00:00:00 2001 From: Vladyslav Romanchuk Date: Mon, 8 Jun 2020 10:10:29 -0700 Subject: [PATCH 1/2] fix npe when mapping insert / delete events. Insert event does not have oldImage. Remove event does not have newImage. At this moment library just throws nullPointerException --- .../DynamodbStreamRecordTransformer.java | 18 +++++++++++------ .../DynamodbStreamRecordTransformerTest.java | 20 +++++++++++++++++++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/aws-lambda-java-events-sdk-transformer/src/main/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformer.java b/aws-lambda-java-events-sdk-transformer/src/main/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformer.java index 09572bdc..08ba034d 100644 --- a/aws-lambda-java-events-sdk-transformer/src/main/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformer.java +++ b/aws-lambda-java-events-sdk-transformer/src/main/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformer.java @@ -1,10 +1,20 @@ package com.amazonaws.services.lambda.runtime.events.transformers.dynamodb; +import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.StreamRecord; +import java.util.Map; + public class DynamodbStreamRecordTransformer { public static StreamRecord toStreamRecordV2(final com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord streamRecord) { + Map newImage = streamRecord.getNewImage() != null + ? DynamodbAttributeValueTransformer.toAttributeValueMapV2(streamRecord.getNewImage()) + : null; + Map oldImage = streamRecord.getOldImage() != null + ? DynamodbAttributeValueTransformer.toAttributeValueMapV2(streamRecord.getOldImage()) + : null; + return StreamRecord.builder() .approximateCreationDateTime( streamRecord.getApproximateCreationDateTime().toInstant() @@ -12,12 +22,8 @@ public static StreamRecord toStreamRecordV2(final com.amazonaws.services.lambda. .keys( DynamodbAttributeValueTransformer.toAttributeValueMapV2(streamRecord.getKeys()) ) - .newImage( - DynamodbAttributeValueTransformer.toAttributeValueMapV2(streamRecord.getNewImage()) - ) - .oldImage( - DynamodbAttributeValueTransformer.toAttributeValueMapV2(streamRecord.getOldImage()) - ) + .newImage(newImage) + .oldImage(oldImage) .sequenceNumber(streamRecord.getSequenceNumber()) .sizeBytes(streamRecord.getSizeBytes()) .streamViewType(streamRecord.getStreamViewType()) diff --git a/aws-lambda-java-events-sdk-transformer/src/test/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformerTest.java b/aws-lambda-java-events-sdk-transformer/src/test/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformerTest.java index 269347b8..5cd3b01b 100644 --- a/aws-lambda-java-events-sdk-transformer/src/test/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformerTest.java +++ b/aws-lambda-java-events-sdk-transformer/src/test/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformerTest.java @@ -101,4 +101,24 @@ public void testToStreamRecordV2() { StreamRecord convertedStreamRecord = DynamodbStreamRecordTransformer.toStreamRecordV2(streamRecord_event); Assertions.assertEquals(streamRecord_v2, convertedStreamRecord); } + + @Test + public void testToStreamRecordV2WhenOldImageIsNull() { + com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord streamRecord = streamRecord_event.clone(); + streamRecord.setOldImage(null); + + Assertions.assertDoesNotThrow(() -> { + DynamodbStreamRecordTransformer.toStreamRecordV2(streamRecord); + }); + } + + @Test + public void testToStreamRecordV2WhenNewImageIsNull() { + com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord streamRecord = streamRecord_event.clone(); + streamRecord.setNewImage(null); + + Assertions.assertDoesNotThrow(() -> { + DynamodbStreamRecordTransformer.toStreamRecordV2(streamRecord); + }); + } } \ No newline at end of file From efb56eaef202cdb0cdd044b18394ea7399362642 Mon Sep 17 00:00:00 2001 From: Carl Zogheib <11421173+carlzogh@users.noreply.github.com> Date: Thu, 11 Jun 2020 09:36:00 +0100 Subject: [PATCH 2/2] Remove intermediate variables --- .../DynamodbStreamRecordTransformer.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/aws-lambda-java-events-sdk-transformer/src/main/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformer.java b/aws-lambda-java-events-sdk-transformer/src/main/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformer.java index 08ba034d..65985487 100644 --- a/aws-lambda-java-events-sdk-transformer/src/main/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformer.java +++ b/aws-lambda-java-events-sdk-transformer/src/main/java/com/amazonaws/services/lambda/runtime/events/transformers/dynamodb/DynamodbStreamRecordTransformer.java @@ -1,29 +1,28 @@ package com.amazonaws.services.lambda.runtime.events.transformers.dynamodb; -import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.StreamRecord; -import java.util.Map; - public class DynamodbStreamRecordTransformer { public static StreamRecord toStreamRecordV2(final com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord streamRecord) { - Map newImage = streamRecord.getNewImage() != null - ? DynamodbAttributeValueTransformer.toAttributeValueMapV2(streamRecord.getNewImage()) - : null; - Map oldImage = streamRecord.getOldImage() != null - ? DynamodbAttributeValueTransformer.toAttributeValueMapV2(streamRecord.getOldImage()) - : null; return StreamRecord.builder() .approximateCreationDateTime( - streamRecord.getApproximateCreationDateTime().toInstant() + streamRecord.getApproximateCreationDateTime().toInstant() ) .keys( - DynamodbAttributeValueTransformer.toAttributeValueMapV2(streamRecord.getKeys()) + DynamodbAttributeValueTransformer.toAttributeValueMapV2(streamRecord.getKeys()) + ) + .newImage( + streamRecord.getNewImage() != null + ? DynamodbAttributeValueTransformer.toAttributeValueMapV2(streamRecord.getNewImage()) + : null + ) + .oldImage( + streamRecord.getOldImage() != null + ? DynamodbAttributeValueTransformer.toAttributeValueMapV2(streamRecord.getOldImage()) + : null ) - .newImage(newImage) - .oldImage(oldImage) .sequenceNumber(streamRecord.getSequenceNumber()) .sizeBytes(streamRecord.getSizeBytes()) .streamViewType(streamRecord.getStreamViewType())