Skip to content

NPE for Map serializing #998

@cmdjulian

Description

@cmdjulian

Search before asking

  • I searched in the issues and found nothing similar.
  • 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: FasterXML/jackson-databind#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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions