Codec not found for requested operation: [timestamp <-> com.datastax.driver.core.LocalDate]

10,622 views
Skip to first unread message

Antoine Toulme

unread,
May 11, 2016, 3:06:24 AM5/11/16
to DataStax Java Driver for Apache Cassandra User Mailing List
Hello,

I am trying to upgrade spring-data-cassandra to work with Cassandra 3.x. I unfortunately am hitting errors.
My setup is using cassandra-driver-core 3.0.1, cassandra-driver-dse 3.0.0-rc1 (is there a new release out since?).

Here is the stacktrace. It occurs when reading a property of type timestamp, to be cast into a Date field.

This works well with Cassandra 2.2.5.

Any help is very welcome.

com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [timestamp <-> com.datastax.driver.core.LocalDate]
	com.datastax.driver.core.CodecRegistry.notFound(CodecRegistry.java:679)
	com.datastax.driver.core.CodecRegistry.createCodec(CodecRegistry.java:526)
	com.datastax.driver.core.CodecRegistry.findCodec(CodecRegistry.java:506)
	com.datastax.driver.core.CodecRegistry.access$200(CodecRegistry.java:140)
	com.datastax.driver.core.CodecRegistry$TypeCodecCacheLoader.load(CodecRegistry.java:211)
	com.datastax.driver.core.CodecRegistry$TypeCodecCacheLoader.load(CodecRegistry.java:208)
	com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3542)
	com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2323)
	com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2286)
	com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201)
	com.google.common.cache.LocalCache.get(LocalCache.java:3953)
	com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3957)
	com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4875)
	com.datastax.driver.core.CodecRegistry.lookupCodec(CodecRegistry.java:480)
	com.datastax.driver.core.CodecRegistry.codecFor(CodecRegistry.java:448)
	com.datastax.driver.core.CodecRegistry.codecFor(CodecRegistry.java:430)
	com.datastax.driver.core.AbstractGettableByIndexData.codecFor(AbstractGettableByIndexData.java:69)
	com.datastax.driver.core.AbstractGettableByIndexData.getDate(AbstractGettableByIndexData.java:174)
	com.datastax.driver.core.AbstractGettableData.getDate(AbstractGettableData.java:26)
	org.springframework.data.cassandra.convert.ColumnReader.get(ColumnReader.java:93)
	org.springframework.data.cassandra.convert.ColumnReader.get(ColumnReader.java:39)
	org.springframework.data.cassandra.convert.ColumnReader.get(ColumnReader.java:31)
	org.springframework.data.cassandra.convert.BasicCassandraRowValueProvider.getPropertyValue(BasicCassandraRowValueProvider.java:64)
	org.springframework.data.cassandra.convert.MappingCassandraConverter.readPropertyFromRow(MappingCassandraConverter.java:185)
	org.springframework.data.cassandra.convert.MappingCassandraConverter$1.doWithPersistentProperty(MappingCassandraConverter.java:149)
	org.springframework.data.cassandra.convert.MappingCassandraConverter$1.doWithPersistentProperty(MappingCassandraConverter.java:144)
	org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:318)
	org.springframework.data.cassandra.convert.MappingCassandraConverter.readPropertiesFromRow(MappingCassandraConverter.java:144)
	org.springframework.data.cassandra.convert.MappingCassandraConverter.readEntityFromRow(MappingCassandraConverter.java:136)
	org.springframework.data.cassandra.convert.MappingCassandraConverter.readRow(MappingCassandraConverter.java:116)
	org.springframework.data.cassandra.convert.MappingCassandraConverter.read(MappingCassandraConverter.java:201)
	org.springframework.data.cassandra.core.CassandraConverterRowCallback.doWith(CassandraConverterRowCallback.java:47)
	org.springframework.data.cassandra.core.CassandraTemplate.selectOne(CassandraTemplate.java:611)
	org.springframework.data.cassandra.core.CassandraTemplate.selectOne(CassandraTemplate.java:456)
	org.springframework.data.cassandra.core.CassandraTemplate.selectOneById(CassandraTemplate.java:375)
	org.springframework.data.cassandra.repository.support.SimpleCassandraRepository.findOne(SimpleCassandraRepository.java:69)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:498)
	org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:503)
	org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:488)
	org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
	com.sun.proxy.$Proxy42.findOne(Unknown Source)

Alexandre Dutra

unread,
May 11, 2016, 4:17:33 AM5/11/16
to DataStax Java Driver for Apache Cassandra User Mailing List
Hello Antoine,

The error you are seeing is "normal" because there is no built-in codec that maps a CQL TIMESTAMP to a LocalDate instance.

The correct mappings that the driver offers out of the box for temporal types are:

TIMESTAMP <-> java.util.Date                     : use getTimestamp()
TIME      <-> long                               : use getTime()
DATE      <-> com.datastax.driver.core.LocalDate : use getDate()

So you should actually be using AbstractGettableData.getTimestamp().

That said, the error message is a bit cumbersome and another user has already filed a similar Jira, JAVA-1176. We decided to improve the error message to include a hint about what to do to fix it, see JAVA-1177.

Also please take a look at the upgrade guide if you are migrating from an older version of the driver as a lot of breaking changes exist between 2.1.x and 3.0.x.

Hope that helps,

Alexandre




--
You received this message because you are subscribed to the Google Groups "DataStax Java Driver for Apache Cassandra User Mailing List" group.
To unsubscribe from this group and stop receiving emails from it, send an email to java-driver-us...@lists.datastax.com.
--
Alexandre Dutra
Driver & Tools Engineer @ DataStax

Antoine Toulme

unread,
May 11, 2016, 12:23:00 PM5/11/16
to java-dri...@lists.datastax.com
Thank you for your great advice. I should have a patch ready soon.

I did follow the upgrade guide and provided a patch to spring-data-cassandra according to its guidelines. It was very helpful, thank you!

Günther Grill

unread,
May 28, 2019, 8:59:05 AM5/28/19
to DataStax Java Driver for Apache Cassandra User Mailing List
Is this still valid for 4.0.1?

I've a table with timestamp and try to insert a Date.
The error I get is:

com.datastax.oss.driver.api.core.type.codec.CodecNotFoundException: Codec not found for requested operation: [TIMESTAMP <-> java.util.Date]

What type is the appropriate one here to bind with timestamp?

regards

Alexandre Dutra

unread,
May 28, 2019, 9:03:21 AM5/28/19
to DataStax Java Driver for Apache Cassandra User Mailing List
Hi,

Starting with driver 4.0, the CQL type timestamp is not mapped to java.util.Date anymore, but to java.time.Instant. See the following links for more details:


Thanks,

Alex Dutra

--
You received this message because you are subscribed to the Google Groups "DataStax Java Driver for Apache Cassandra User Mailing List" group.
To unsubscribe from this group and stop receiving emails from it, send an email to java-driver-us...@lists.datastax.com.


--

datastax_logo.png

Alexandre DUTRA

Driver & Tools Engineer | alexand...@datastax.com


linkedin.png facebook.png twitter.png g+.png


Reply all
Reply to author
Forward
0 new messages