-
Notifications
You must be signed in to change notification settings - Fork 942
Closed
Labels
bugThis issue is a bug.This issue is a bug.closed-for-stalenessdynamodb-enhancedpotential-regressionMarking this issue as a potential regression to be checked by team memberMarking this issue as a potential regression to be checked by team member
Description
Describe the bug
Given dynamoDBEnhanced client:
DynamoDbEnhancedAsyncClient.builder()
.dynamoDbClient(dynamoDB)
.extensions(
AutoGeneratedTimestampRecordExtension.builder().build()
.build()
and a table schema manually written like somewhat like this:
TableSchema.builder(Entity.class, ImmutableEntity.Builder.class)
.newItemBuilder(ImmutableEntity::builder, ImmutableEntity.Builder::build)
.addAttribute(
EnhancedType.listOf(EnhancedType.documentOf(Email.class, Email.schema())),
a ->
a.name("email")
.getter(Entity::getEmails)
.setter(ImmutableEntity.Builder::addAllEmails))
.addAttribute(
Instant.class,
a ->
a.name("updated")
.getter(Entity::getUpdated)
.setter(ImmutableEntity.Builder::updated)
.tags(
AutoGeneratedTimestampRecordExtension.AttributeTags
.autoGeneratedTimestampAttribute()))
.build();
This would fail to create/update record with:
java.lang.IllegalArgumentException: Class does not appear to be a valid DynamoDb annotated class. [class = "interface com.github.simy4.poc.model.Email"]
at software.amazon.awssdk.enhanced.dynamodb.TableSchema.fromClass(TableSchema.java:211)
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
*__checkpoint ⇢ HTTP POST "/v1/entities" [ExceptionHandlingWebHandler]
Original Stack Trace:
at software.amazon.awssdk.enhanced.dynamodb.TableSchema.fromClass(TableSchema.java:211)
at software.amazon.awssdk.enhanced.dynamodb.internal.extensions.utility.NestedRecordUtils.getTableSchemaForListElement(NestedRecordUtils.java:56)
at software.amazon.awssdk.enhanced.dynamodb.extensions.AutoGeneratedTimestampRecordExtension.lambda$beforeWrite$1(AutoGeneratedTimestampRecordExtension.java:155)
at java.base/java.util.HashMap.forEach(HashMap.java:1430)
at software.amazon.awssdk.enhanced.dynamodb.extensions.AutoGeneratedTimestampRecordExtension.beforeWrite(AutoGeneratedTimestampRecordExtension.java:147)
at software.amazon.awssdk.enhanced.dynamodb.internal.extensions.ChainExtension.beforeWrite(ChainExtension.java:113)
at software.amazon.awssdk.enhanced.dynamodb.internal.operations.UpdateItemOperation.generateRequest(UpdateItemOperation.java:117)
at software.amazon.awssdk.enhanced.dynamodb.internal.operations.UpdateItemOperation.generateRequest(UpdateItemOperation.java:55)
at software.amazon.awssdk.enhanced.dynamodb.internal.operations.CommonOperation.executeAsync(CommonOperation.java:139)
at software.amazon.awssdk.enhanced.dynamodb.internal.operations.TableOperation.executeOnPrimaryIndexAsync(TableOperation.java:81)
at software.amazon.awssdk.enhanced.dynamodb.internal.client.DefaultDynamoDbAsyncTable.updateItem(DefaultDynamoDbAsyncTable.java:278)
at software.amazon.awssdk.enhanced.dynamodb.internal.client.DefaultDynamoDbAsyncTable.updateItem(DefaultDynamoDbAsyncTable.java:287)
at software.amazon.awssdk.enhanced.dynamodb.internal.client.DefaultDynamoDbAsyncTable.updateItem(DefaultDynamoDbAsyncTable.java:307)
at com.github.simy4.poc.repositories.EntityCrudRepository.save(EntityCrudRepository.java:29)
I believe that is happening due to the fact that AutoGeneratedTimestampRecordExtension
doesn't take provided schema into account and discovers the schema based on annotation which it fails to do, since there are no annotations provided.
Regression Issue
- Select this option if this issue appears to be a regression.
Expected Behavior
Manually provided schema should be used during extension attributes discovery.
Current Behavior
Extension fails with exception.
java.lang.IllegalArgumentException: Class does not appear to be a valid DynamoDb annotated class. [class = "interface com.github.simy4.poc.model.Email"]
at software.amazon.awssdk.enhanced.dynamodb.TableSchema.fromClass(TableSchema.java:211)
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
*__checkpoint ⇢ HTTP POST "/v1/entities" [ExceptionHandlingWebHandler]
Original Stack Trace:
at software.amazon.awssdk.enhanced.dynamodb.TableSchema.fromClass(TableSchema.java:211)
at software.amazon.awssdk.enhanced.dynamodb.internal.extensions.utility.NestedRecordUtils.getTableSchemaForListElement(NestedRecordUtils.java:56)
at software.amazon.awssdk.enhanced.dynamodb.extensions.AutoGeneratedTimestampRecordExtension.lambda$beforeWrite$1(AutoGeneratedTimestampRecordExtension.java:155)
at java.base/java.util.HashMap.forEach(HashMap.java:1430)
at software.amazon.awssdk.enhanced.dynamodb.extensions.AutoGeneratedTimestampRecordExtension.beforeWrite(AutoGeneratedTimestampRecordExtension.java:147)
at software.amazon.awssdk.enhanced.dynamodb.internal.extensions.ChainExtension.beforeWrite(ChainExtension.java:113)
at software.amazon.awssdk.enhanced.dynamodb.internal.operations.UpdateItemOperation.generateRequest(UpdateItemOperation.java:117)
at software.amazon.awssdk.enhanced.dynamodb.internal.operations.UpdateItemOperation.generateRequest(UpdateItemOperation.java:55)
at software.amazon.awssdk.enhanced.dynamodb.internal.operations.CommonOperation.executeAsync(CommonOperation.java:139)
at software.amazon.awssdk.enhanced.dynamodb.internal.operations.TableOperation.executeOnPrimaryIndexAsync(TableOperation.java:81)
at software.amazon.awssdk.enhanced.dynamodb.internal.client.DefaultDynamoDbAsyncTable.updateItem(DefaultDynamoDbAsyncTable.java:278)
at software.amazon.awssdk.enhanced.dynamodb.internal.client.DefaultDynamoDbAsyncTable.updateItem(DefaultDynamoDbAsyncTable.java:287)
at software.amazon.awssdk.enhanced.dynamodb.internal.client.DefaultDynamoDbAsyncTable.updateItem(DefaultDynamoDbAsyncTable.java:307)
at com.github.simy4.poc.repositories.EntityCrudRepository.save(EntityCrudRepository.java:29)
Reproduction Steps
Issue is reproducible in this branch of a public repo: SimY4/ImmutablesDynamoDBMapperPOC#509
Possible Solution
Take provided schema for attributes discovery.
Additional Information/Context
No response
AWS Java SDK version used
2.33.4
JDK version used
21
Operating System and version
Linux
Metadata
Metadata
Assignees
Labels
bugThis issue is a bug.This issue is a bug.closed-for-stalenessdynamodb-enhancedpotential-regressionMarking this issue as a potential regression to be checked by team memberMarking this issue as a potential regression to be checked by team member