tarantool / cartridge-springdata

Spring Data Tarantool
Other
18 stars 7 forks source link

No converter found from type Integer to type Double #67

Open ArtDu opened 2 years ago

ArtDu commented 2 years ago

The connector normally writes Double data of 0.0 or0, but there is a problem to read it back. Probably cartridge-java converts the number 0.0 from Tarantool to Integer, and then the spring-data converter cannot find a way to convert Integer to Double

Example from tdg:

{
  "name" : "baseCapitalAmountCur",
  "type" : [ "null", "double" ]
}
private Double baseCapitalAmountCur;
2021-11-01 14:25:43.256 ERROR 3916 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataRetrievalFailureException: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.Integer] to type [java.lang.Double]; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.Integer] to type [java.lang.Double]] with root cause

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.Integer] to type [java.lang.Double]
    at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:322) ~[spring-core-5.3.8.jar:5.3.8]
    at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:195) ~[spring-core-5.3.8.jar:5.3.8]
    at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:175) ~[spring-core-5.3.8.jar:5.3.8]
    at org.springframework.data.mapping.model.ConvertingPropertyAccessor.convertIfNecessary(ConvertingPropertyAccessor.java:120) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.mapping.model.ConvertingPropertyAccessor.setProperty(ConvertingPropertyAccessor.java:63) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider.lambda$convertCustomType$0(MappingTarantoolReadConverter.java:277) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:360) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider.convertCustomType(MappingTarantoolReadConverter.java:269) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider.convertIfNeeded(MappingTarantoolReadConverter.java:321) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider.readValue(MappingTarantoolReadConverter.java:238) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider.access$100(MappingTarantoolReadConverter.java:168) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider$1.getPropertyValue(MappingTarantoolReadConverter.java:262) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider$1.getPropertyValue(MappingTarantoolReadConverter.java:258) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider.lambda$convertCustomType$0(MappingTarantoolReadConverter.java:273) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:360) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider.convertCustomType(MappingTarantoolReadConverter.java:269) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider.convertIfNeeded(MappingTarantoolReadConverter.java:321) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider.readValue(MappingTarantoolReadConverter.java:238) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter$TarantoolPropertyValueProvider.getPropertyValue(MappingTarantoolReadConverter.java:216) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter.setProperty(MappingTarantoolReadConverter.java:156) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter.lambda$convertProperties$0(MappingTarantoolReadConverter.java:142) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:360) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter.convertProperties(MappingTarantoolReadConverter.java:138) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolReadConverter.read(MappingTarantoolReadConverter.java:113) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.convert.MappingTarantoolConverter.read(MappingTarantoolConverter.java:73) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.BaseTarantoolTemplate.mapToEntity(BaseTarantoolTemplate.java:385) ~[spring-data-tarantool-0.4.2.jar:na]
    at org.springframework.data.tarantool.core.BaseTarantoolTemplate.lambda$null$21(BaseTarantoolTemplate.java:361) ~[spring-data-tarantool-0.4.2.jar:na]
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
    at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) ~[na:na]
    at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
    at org.springframework.data.tarantool.core.BaseTarantoolTemplate.lambda$getListValueConverter$2f00f61b$1(BaseTarantoolTemplate.java:362) ~[spring-data-tarantool-0.4.2.jar:na]
    at io.tarantool.driver.core.SingleValueCallResultImpl.<init>(SingleValueCallResultImpl.java:32) ~[cartridge-driver-0.6.0.jar:na]
    at io.tarantool.driver.mappers.SingleValueCallResultConverter.fromValue(SingleValueCallResultConverter.java:25) ~[cartridge-driver-0.6.0.jar:na]
    at io.tarantool.driver.mappers.SingleValueCallResultConverter.fromValue(SingleValueCallResultConverter.java:13) ~[cartridge-driver-0.6.0.jar:na]
    at io.tarantool.driver.mappers.DefaultMessagePackMapper.fromValue(DefaultMessagePackMapper.java:109) ~[cartridge-driver-0.6.0.jar:na]
    at io.tarantool.driver.mappers.DefaultMessagePackMapper.fromValue(DefaultMessagePackMapper.java:89) ~[cartridge-driver-0.6.0.jar:na]
    at io.tarantool.driver.mappers.AbstractResultMapper.fromValue(AbstractResultMapper.java:34) ~[cartridge-driver-0.6.0.jar:na]
    at io.tarantool.driver.handlers.TarantoolResponseHandler.channelRead0(TarantoolResponseHandler.java:51) ~[cartridge-driver-0.6.0.jar:na]
    at io.tarantool.driver.handlers.TarantoolResponseHandler.channelRead0(TarantoolResponseHandler.java:23) ~[cartridge-driver-0.6.0.jar:na]
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
    at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]