aws / aws/aws-sdk-java-v2

DynamoDb error with Optional<Map<String, String>> field

Open
#3,004 11 comments 1 reaction 1 assignee Assigned to @debora-ito View on GitHub
bug dynamodb-enhanced p3
Dominant language
Java
Stars
2.6k
Forks
1k
Avg merge
2d 9h
Merged PRs (30d)
51

Description

### Describe the issue

I'm trying to write to DynamoDb an object model with an `Optional>` field, but it does not work.
I'm using a custom Optional attribute converter:

```
MapAttributeConverter> mapConverter = MapAttributeConverter.builder(EnhancedType.mapOf(String.class, String.class))
.mapConstructor(HashMap::new)
.keyConverter(StringStringConverter.create())
.valueConverter(StringAttributeConverter.create())
.build();
OptionalAttributeConverter> optionalMapAttributeConverter = OptionalAttributeConverter.create(mapConverter);
```

Any help is appreciated!

### Steps to Reproduce

This is a sample project that reproduce the issue:
[https://github.com/marcogramy/dynamodbdemo](https://github.com/marcogramy/dynamodbdemo)

### Current behavior

I'm obtaining this error:

> Caused by: java.lang.IllegalStateException: **Converter not found for EnhancedType(java.util.Optional>**)
at software.amazon.awssdk.enhanced.dynamodb.DefaultAttributeConverterProvider.lambda$converterFor$0(DefaultAttributeConverterProvider.java:134) ~[dynamodb-enhanced-2.17.121.jar:na]
at java.util.Optional.orElseThrow(Optional.java:290) ~[na:1.8.0_312]
at software.amazon.awssdk.enhanced.dynamodb.DefaultAttributeConverterProvider.converterFor(DefaultAttributeConverterProvider.java:134) ~[dynamodb-enhanced-2.17.121.jar:na]
at java.util.HashMap.computeIfAbsent(HashMap.java:1128) ~[na:1.8.0_312]
at com.example.dynamodbdemo.converter.CustomAttributeConverterProvider.converterFor(CustomAttributeConverterProvider.java:39) ~[classes/:na]
at software.amazon.awssdk.enhanced.dynamodb.internal.converter.ChainConverterProvider.lambda$converterFor$0(ChainConverterProvider.java:66) ~[dynamodb-enhanced-2.17.121.jar:na]
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174) ~[na:1.8.0_312]
at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1361) ~[na:1.8.0_312]
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) ~[na:1.8.0_312]
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:499) ~[na:1.8.0_312]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:486) ~[na:1.8.0_312]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[na:1.8.0_312]
at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) ~[na:1.8.0_312]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_312]
at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:531) ~[na:1.8.0_312]
at software.amazon.awssdk.enhanced.dynamodb.internal.converter.ChainConverterProvider.converterFor(ChainConverterProvider.java:68) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.mapper.ImmutableAttribute.converterFrom(ImmutableAttribute.java:166) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.mapper.ImmutableAttribute.resolve(ImmutableAttribute.java:162) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema.lambda$new$0(StaticImmutableTableSchema.java:153) ~[dynamodb-enhanced-2.17.121.jar:na]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_312]
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384) ~[na:1.8.0_312]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) ~[na:1.8.0_312]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[na:1.8.0_312]
at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:313) ~[na:1.8.0_312]
at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742) ~[na:1.8.0_312]
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:647) ~[na:1.8.0_312]
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema.(StaticImmutableTableSchema.java:159) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema.(StaticImmutableTableSchema.java:77) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema$Builder.build(StaticImmutableTableSchema.java:425) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticTableSchema.(StaticTableSchema.java:66) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticTableSchema.(StaticTableSchema.java:64) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticTableSchema$Builder.build(StaticTableSchema.java:255) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.mapper.BeanTableSchema.createStaticTableSchema(BeanTableSchema.java:208) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.mapper.BeanTableSchema.create(BeanTableSchema.java:129) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.mapper.BeanTableSchema.create(BeanTableSchema.java:121) ~[dynamodb-enhanced-2.17.121.jar:na]
at software.amazon.awssdk.enhanced.dynamodb.TableSchema.fromBean(TableSchema.java:81) ~[dynamodb-enhanced-2.17.121.jar:na]
at com.example.dynamodbdemo.EntityRepository.(EntityRepository.java:16) ~[classes/:na]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_312]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_312]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_312]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_312]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211) ~[spring-beans-5.3.14.jar:5.3.14]
... 34 common frames omitted

### AWS Java SDK version used

dynamodb-enhanced version 2.17.121

### JDK version used

openjdk version "1.8.0_312"

### Operating System and version

Linux 5.4.0-91-generic #102-Ubuntu

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.