Getting this below error while querying items from DDB. Table already has required annotations & getter and setter methods too with converter logic. But still getting the same error & stucked for last 2 days.
com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: PosAuditInfoTable[ProductIdentificationDetails]; could not unconvert attribute
Caused by: com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: could not invoke null on class com.amazon.vas.pos.persistence.PosAuditInfoTable with value Optional[ProductIdentificationDetails(identificationNumbers=[serialNumber2, serialNumber1, serialNumber3], capturedTime=Fri Apr 12 10:23:38 UTC 2024, userId=32886492417)] of type class java.util.Optional at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$MethodReflect.set(StandardBeanProperties.java:136) ~[AWSPersistenceJavaClient-1.12.x.jar:?] at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.set(DynamoDBMapperFieldModel.java:111) ~[AWSPersistenceJavaClient-1.12.x.jar:?] at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.unconvertAndSet(DynamoDBMapperFieldModel.java:164) ~[AWSPersistenceJavaClient-1.12.x.jar:?] at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel.unconvert(DynamoDBMapperTableModel.java:267) ~[AWSPersistenceJavaClient-1.12.x.jar:?] … 97 more Caused by: java.lang.NullPointerException at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$MethodReflect.set(StandardBeanProperties.java:133) ~[AWSPersistenceJavaClient-1.12.x.jar:?] at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.set(DynamoDBMapperFieldModel.java:111) ~[AWSPersistenceJavaClient-1.12.x.jar:?] at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.unconvertAndSet(DynamoDBMapperFieldModel.java:164) ~[AWSPersistenceJavaClient-1.12.x.jar:?] at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel.unconvert(DynamoDBMapperTableModel.java:267) ~[AWSPersistenceJavaClient-1.12.x.jar:?] … 97 more
public void setProductIdentificationDetails(final ProductIdentificationDetails productIdentificationDetails) {
this.productIdentificationDetails = Optional.ofNullable(productIdentificationDetails);
}
@DynamoDBMarshalling(marshallerClass = ProductIdentificationDetailsConverter.class)
@DynamoDBAttribute(attributeName = "ProductIdentificationDetails")
public Optional<ProductIdentificationDetails> getProductIdentificationDetails() {
log.info("debug : " + this.productIdentificationDetails);
return this.productIdentificationDetails;
}
Annotations used on table class
@Builder
@NoArgsConstructor
@AllArgsConstructor (access = AccessLevel.PRIVATE)
@Log4j
@DynamoDBTable
Object converter logic:
@Log4j
public class ProductIdentificationDetailsConverter implements DynamoDBMarshaller<Optional<ProductIdentificationDetails>>
{
@Override
public String marshall(final Optional<ProductIdentificationDetails> object) {
return object.isPresent() ? IonUtility.toString(object.get()) : null;
}
@Override
public Optional<ProductIdentificationDetails> unmarshall(final Class<Optional<ProductIdentificationDetails>> clazz,
final String serializedObject) {
try {
return (StringUtils.isNotEmpty(serializedObject)
? Optional.of(IonUtility.toObject(serializedObject, ProductIdentificationDetails.class))
: Optional.empty());
} catch (final IllegalArgumentException e) {
throw new IllegalArgumentException("ProductIdentificationDetails De-serialization Failed", e);
}
}
}
Kancharla Aishwarya is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.