Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't compute ClassId for primitive type: int #778

Closed
1 task done
pstreef opened this issue Mar 23, 2024 · 5 comments · Fixed by #779
Closed
1 task done

Can't compute ClassId for primitive type: int #778

pstreef opened this issue Mar 23, 2024 · 5 comments · Fixed by #779
Labels
to-evaluate Issue that has been received but not yet evaluated

Comments

@pstreef
Copy link

pstreef commented Mar 23, 2024

Search before asking

  • I searched in the issues and found nothing similar.

Describe the bug

When combining certain libraries into a spring boot application and using the Spring provided ObjectMapper it fails to deserialize json to a class that has primitive integer fields.

Version Information

2.17.0

Reproduction

https://github.com/pstreef/jackson-primitive-int-issue

Expected behavior

The test readerForListOnRecordWithIntField in JacksonTest.java does not fail.

Additional context

It seems that there is a conflict caused by some kotlin module.

Full stacktrace:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Can't compute ClassId for primitive type: int
 at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 1]
	at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:62)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:269)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:151)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:440)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:384)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:285)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:265)
	at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:163)
	at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:636)
	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:190)
	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:30)
	at com.fasterxml.jackson.databind.DeserializationContext.handleSecondaryContextualization(DeserializationContext.java:882)
	at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:674)
	at com.fasterxml.jackson.databind.ObjectReader._findRootDeserializer(ObjectReader.java:2406)
	at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2125)
	at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1566)
	at nl.peterstreef.jackson.JacksonTest.readerForListOnRecordWithIntField(JacksonTest.java:24)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.IllegalArgumentException: Can't compute ClassId for primitive type: int
	at kotlin.reflect.jvm.internal.impl.descriptors.runtime.structure.ReflectClassUtilKt.getClassId(reflectClassUtil.kt:60)
	at kotlin.reflect.jvm.internal.impl.descriptors.runtime.structure.ReflectJavaClass.getFqName(ReflectJavaClass.kt:56)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.types.JavaTypeResolver.computeTypeConstructor(JavaTypeResolver.kt:144)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.types.JavaTypeResolver.computeSimpleJavaClassifierType(JavaTypeResolver.kt:128)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.types.JavaTypeResolver.transformJavaClassifierType(JavaTypeResolver.kt:108)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.types.JavaTypeResolver.transformJavaType(JavaTypeResolver.kt:58)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaClassMemberScope.createRecordConstructorParameters(LazyJavaClassMemberScope.kt:130)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaClassMemberScope.createDefaultRecordConstructor(LazyJavaClassMemberScope.kt:114)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaClassMemberScope.access$createDefaultRecordConstructor(LazyJavaClassMemberScope.kt:63)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaClassMemberScope$constructors$1.invoke(LazyJavaClassMemberScope.kt:92)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaClassMemberScope$constructors$1.invoke(LazyJavaClassMemberScope.kt:83)
	at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:408)
	at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke(LockBasedStorageManager.java:527)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaClassDescriptor.getConstructors(LazyJavaClassDescriptor.kt:146)
	at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaClassDescriptor.getConstructors(LazyJavaClassDescriptor.kt:42)
	at kotlin.reflect.jvm.internal.KClassImpl.getConstructorDescriptors(KClassImpl.kt:214)
	at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:105)
	at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:104)
	at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:70)
	at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32)
	at kotlin.reflect.jvm.internal.KClassImpl$Data.getConstructors(KClassImpl.kt:104)
	at kotlin.reflect.jvm.internal.KClassImpl.getConstructors(KClassImpl.kt:249)
	at kotlin.reflect.jvm.ReflectJvmMapping.getKotlinFunction(ReflectJvmMapping.kt:177)
	at com.fasterxml.jackson.module.kotlin.ReflectionCacheKt.valueClassAwareKotlinFunction(ReflectionCache.kt:157)
	at com.fasterxml.jackson.module.kotlin.ReflectionCacheKt.access$valueClassAwareKotlinFunction(ReflectionCache.kt:1)
	at com.fasterxml.jackson.module.kotlin.ReflectionCache.kotlinFromJava(ReflectionCache.kt:63)
	at com.fasterxml.jackson.module.kotlin.ReflectionCache.findKotlinParameter(ReflectionCache.kt:146)
	at com.fasterxml.jackson.module.kotlin.KotlinNamesAnnotationIntrospector.refineDeserializationType(KotlinNamesAnnotationIntrospector.kt:79)
	at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.refineDeserializationType(AnnotationIntrospectorPair.java:688)
	at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.resolveMemberAndTypeAnnotations(BasicDeserializerFactory.java:2421)
	at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.constructCreatorProperty(BasicDeserializerFactory.java:1210)
	at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._addImplicitConstructorCreators(BasicDeserializerFactory.java:512)
	at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._constructDefaultValueInstantiator(BasicDeserializerFactory.java:301)
	at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:222)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:262)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:151)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:440)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:384)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:285)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:265)
	at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:163)
	at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:636)
	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:190)
	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:30)
	at com.fasterxml.jackson.databind.DeserializationContext.handleSecondaryContextualization(DeserializationContext.java:882)
	at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:674)
	at com.fasterxml.jackson.databind.ObjectReader._prefetchRootDeserializer(ObjectReader.java:2450)
	at com.fasterxml.jackson.databind.ObjectReader.<init>(ObjectReader.java:194)
	at com.fasterxml.jackson.databind.ObjectMapper._newReader(ObjectMapper.java:809)
	at com.fasterxml.jackson.databind.ObjectMapper.readerForListOf(ObjectMapper.java:4400)
	... 4 more
@pstreef pstreef added the to-evaluate Issue that has been received but not yet evaluated label Mar 23, 2024
@cowtowncoder
Copy link
Member

Kotlin-specific as per stack trace, will move to proper repo.

@cowtowncoder cowtowncoder transferred this issue from FasterXML/jackson-databind Mar 23, 2024
@k163377
Copy link
Contributor

k163377 commented Mar 24, 2024

This seems to be a problem with kotlin-reflect.
https://youtrack.jetbrains.com/issue/KT-58649

Unfortunately, it is not a fixable issue in kotlin-module, so this issue is closed.

@k163377 k163377 closed this as completed Mar 24, 2024
k163377 added a commit to k163377/jackson-module-kotlin that referenced this issue Mar 24, 2024
To avoid errors when referencing Record types defined in Java.
Fixed FasterXML#778.
@k163377
Copy link
Contributor

k163377 commented Mar 24, 2024

I jumped to conclusions a little too quickly.
I have made the fixes for 2.17.1, as it was possible to skip processing of classes defined in Java with a simple fix.
#779

@ohadgur
Copy link

ohadgur commented Apr 17, 2024

hello @k163377 , thanks for this fix!
Sorry if I'm rude, but can I ask when is this fix will be released?

@k163377
Copy link
Contributor

k163377 commented Apr 17, 2024

@ohadgur
I can only say that it is the next release.
2.17.1 or 2.18.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
to-evaluate Issue that has been received but not yet evaluated
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants