jackson-module-kotlin
jackson-module-kotlin copied to clipboard
NPE for Map serializing
Search before asking
- [x] I searched in the issues and found nothing similar.
- [x] I have confirmed that the same problem is not reproduced if I exclude the KotlinModule.
- [ ] I searched in the issues of databind and other modules used and found nothing similar.
- [ ] I have confirmed that the problem does not reproduce in Java and only occurs when using Kotlin and KotlinModule.
Describe the bug
Hey,
I found the following closed issue: https://github.com/FasterXML/jackson-databind/issues/4878 I encounter the same issue, but only after upgrading from Jackson 2.18.4 to 2.19.0, downgrading to 2.18.4 fixes it.
This is my stack trace:
Exception in thread "main" java.lang.IllegalArgumentException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null (through reference chain: com.etalytics.etadeploy.render.Kustomize["getAdditionalProperties"]->kotlin.collections.builders.MapBuilder["namespace"])
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4663)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4594)
at io.fabric8.kubernetes.client.utils.KubernetesSerialization.asYaml(KubernetesSerialization.java:237)
at com.etalytics.etadeploy.render.KustomizeManifestRenderer.render(KustomizeManifestRenderer.kt:24)
at com.etalytics.etadeploy.render.renderers.sealedsecrets.SealedSecretsManifestRenderer.render(SealedSecretsManifestRenderer.kt:77)
at com.etalytics.etadeploy.render.KubernetesManifestRenderer$renderManifests$2$1.invokeSuspend(KubernetesManifestRenderer.kt:152)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:124)
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:820)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704)
Suppressed: java.lang.IllegalArgumentException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null (through reference chain: com.etalytics.etadeploy.render.Kustomize["getAdditionalProperties"]->kotlin.collections.builders.MapBuilder["namespace"])
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4663)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4594)
at io.fabric8.kubernetes.client.utils.KubernetesSerialization.asYaml(KubernetesSerialization.java:237)
at com.etalytics.etadeploy.render.KustomizeManifestRenderer.render(KustomizeManifestRenderer.kt:24)
at com.etalytics.etadeploy.render.renderers.traefik.TraefikManifestRenderer.render(TraefikManifestRenderer.kt:83)
... 9 more
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null (through reference chain: com.etalytics.etadeploy.render.Kustomize["getAdditionalProperties"]->kotlin.collections.builders.MapBuilder["namespace"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:400)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:359)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:324)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:810)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:763)
at com.fasterxml.jackson.databind.ser.AnyGetterWriter.getAndSerialize(AnyGetterWriter.java:81)
at com.fasterxml.jackson.databind.ser.AnyGetterWriter.serializeAsField(AnyGetterWriter.java:89)
at io.fabric8.kubernetes.model.jackson.BeanPropertyWriterDelegate.serializeAsField(BeanPropertyWriterDelegate.java:68)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:760)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:503)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:342)
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4641)
... 13 more
Caused by: java.lang.NullPointerException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:796)
... 22 more
Suppressed: java.lang.IllegalArgumentException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null (through reference chain: com.etalytics.etadeploy.render.Kustomize["getAdditionalProperties"]->kotlin.collections.builders.MapBuilder["helmCharts"])
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4663)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4594)
at io.fabric8.kubernetes.client.utils.KubernetesSerialization.asYaml(KubernetesSerialization.java:237)
at com.etalytics.etadeploy.render.KustomizeManifestRenderer.render(KustomizeManifestRenderer.kt:24)
at com.etalytics.etadeploy.render.renderers.monitoring.LocalMonitoringManifestRenderer.render(LocalMonitoringManifestRenderer.kt:236)
at com.etalytics.etadeploy.render.renderers.monitoring.MonitoringManifestRenderer.render(MonitoringManifestRenderer.kt:49)
... 9 more
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null (through reference chain: com.etalytics.etadeploy.render.Kustomize["getAdditionalProperties"]->kotlin.collections.builders.MapBuilder["helmCharts"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:400)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:359)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:324)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:810)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:763)
at com.fasterxml.jackson.databind.ser.AnyGetterWriter.getAndSerialize(AnyGetterWriter.java:81)
at com.fasterxml.jackson.databind.ser.AnyGetterWriter.serializeAsField(AnyGetterWriter.java:89)
at io.fabric8.kubernetes.model.jackson.BeanPropertyWriterDelegate.serializeAsField(BeanPropertyWriterDelegate.java:68)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:760)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:503)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:342)
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4641)
... 14 more
Caused by: java.lang.NullPointerException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:796)
... 23 more
Suppressed: java.lang.IllegalArgumentException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null (through reference chain: com.etalytics.etadeploy.render.Kustomize["getAdditionalProperties"]->kotlin.collections.builders.MapBuilder["namespace"])
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4663)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4594)
at io.fabric8.kubernetes.client.utils.KubernetesSerialization.asYaml(KubernetesSerialization.java:237)
at com.etalytics.etadeploy.render.KustomizeManifestRenderer.render(KustomizeManifestRenderer.kt:24)
at com.etalytics.etadeploy.render.renderers.argocd.ArgoCdManifestRenderer.render(ArgoCdManifestRenderer.kt:245)
... 9 more
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null (through reference chain: com.etalytics.etadeploy.render.Kustomize["getAdditionalProperties"]->kotlin.collections.builders.MapBuilder["namespace"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:400)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:359)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:324)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:810)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:763)
at com.fasterxml.jackson.databind.ser.AnyGetterWriter.getAndSerialize(AnyGetterWriter.java:81)
at com.fasterxml.jackson.databind.ser.AnyGetterWriter.serializeAsField(AnyGetterWriter.java:89)
at io.fabric8.kubernetes.model.jackson.BeanPropertyWriterDelegate.serializeAsField(BeanPropertyWriterDelegate.java:68)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:760)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:503)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:342)
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4641)
... 13 more
Caused by: java.lang.NullPointerException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:796)
... 22 more
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null (through reference chain: com.etalytics.etadeploy.render.Kustomize["getAdditionalProperties"]->kotlin.collections.builders.MapBuilder["namespace"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:400)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:359)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:324)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:810)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:763)
at com.fasterxml.jackson.databind.ser.AnyGetterWriter.getAndSerialize(AnyGetterWriter.java:81)
at com.fasterxml.jackson.databind.ser.AnyGetterWriter.serializeAsField(AnyGetterWriter.java:89)
at io.fabric8.kubernetes.model.jackson.BeanPropertyWriterDelegate.serializeAsField(BeanPropertyWriterDelegate.java:68)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:760)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:503)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:342)
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4641)
... 13 more
Caused by: java.lang.NullPointerException: Cannot invoke "com.fasterxml.jackson.databind.JsonSerializer.serialize(Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)" because "keySerializer" is null
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:796)
... 22 more
Any idea? I could also try to come up with a reproducer if it helps, as there already exists a very similar issue, I though it might not be needed though.
To Reproduce
// Your code here
Expected behavior
No NPE :D
Versions
Kotlin: Jackson-module-kotlin: 2.19.0 Jackson-databind: 2.19.0
Additional context
No response
Please submit code that is minimally reproducible, as it cannot be investigated by only stack trace.
At least on CI, no problems have been detected.
Also note that stack trace here differs from one in https://github.com/FasterXML/jackson-databind/issues/4878 so this is probably not via same code path.
Also: this may be the case already but make sure you use same minor version of jackson-module-kotlin and jackson-databind (both 2.19(.0)).