DynamoDb error with Optional<Map<String, String>> field
- 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
Assessment
This issue has not been assessed yet.