Skip to content

DynamodbAttributeValueTransformer causing break in functionality for empty list when transforming (v2) #224

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
8aemi opened this issue Feb 17, 2021 · 2 comments

Comments

@8aemi
Copy link

8aemi commented Feb 17, 2021

I'm using DynamoDb Enhanced library version 2.15.82. Recently, aws-lambda-java-events-sdk-transformer version 3.0.2 causes a break in the functionality when trying to transform empty list. Empty list is transformed to null which for DynamoDb Enhanced library expects an empty list, and causes DynamoDB Enhanced library to throw the below stack trace.

java.lang.IllegalStateException: Unable to convert attribute value: AttributeValue()
software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.EnhancedAttributeValue.fromAttributeValue(EnhancedAttributeValue.java:352) ~[dynamodb-enhanced-2.15.82.jar:na]
software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.ListAttributeConverter$Delegate.transformTo(ListAttributeConverter.java:154) ~[dynamodb-enhanced-2.15.82.jar:na]
software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.ListAttributeConverter.transformTo(ListAttributeConverter.java:120) ~[dynamodb-enhanced-2.15.82.jar:na]
software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.ListAttributeConverter.transformTo(ListAttributeConverter.java:82) ~[dynamodb-enhanced-2.15.82.jar:na]
software.amazon.awssdk.enhanced.dynamodb.internal.mapper.StaticAttributeType.attributeValueToObject(StaticAttributeType.java:44) ~[dynamodb-enhanced-2.15.82.jar:na]
software.amazon.awssdk.enhanced.dynamodb.internal.mapper.ResolvedImmutableAttribute.lambda$create$1(ResolvedImmutableAttribute.java:61) ~[dynamodb-enhanced-2.15.82.jar:na]
software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema.mapToItem(StaticImmutableTableSchema.java:458) ~[dynamodb-enhanced-2.15.82.jar:na]
software.amazon.awssdk.enhanced.dynamodb.mapper.WrappedTableSchema.mapToItem(WrappedTableSchema.java:54) ~[dynamodb-enhanced-2.15.82.jar:na]

Further investigation points to the below code in DynamodbAttributeValueTransformer that's causing the issue

else if (Objects.nonNull(value.getL())) {
            return AttributeValue.builder()
                    .l(value.getL().isEmpty()
                            ? null
                            : value.getL().stream()
                                .map(DynamodbAttributeValueTransformer::toAttributeValueV2)
                                .collect(Collectors.toList()))
                    .build();

        }

I noticed this change happens from aws-lambda-java-events-sdk-transformer version 2.0.8 to 3.0.0 on commit 3e71a17c57ba6c99734c4633a4f412fd2d5b6b42

Any advice on this? Is there a reason for this code change that causes a break in functionality?

@acmcelwee
Copy link

I just came here to open an issue on the v1 transformer for this same behavior. In our case, the AWS-owned ItemUtils::toSimpleValue is where it's blowing up for us. By coercing an empty list to a null value, the AttributeValue data type is no longer discernible.

@productivityindustries
Copy link

Same issue here. The conversion produces item maps which are not deserializable to Java objects. This is quite a blocker for me, I wonder why no one is still looking at the issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants