Skip to content

Failed to specialize Map type during serialization where type key type incompatibility overidden via "raw" types #1964

Closed
@ptirador

Description

@ptirador

I'm using a class with a Map attribute, whose value is a Collection. I'm using OrientDB, so when I obtain this object from database, it's returning a OTrackedMap object.

When I'm trying to serialize it, it works perfect until Jackson v2.9.2. If I upgrade it to v2.9.3 or v2.9.4, it crashes with the following exception:

INFO: Jackson version: 2.9.4

com.fasterxml.jackson.databind.JsonMappingException: Failed to specialize base type java.util.Map<java.lang.String,java.util.Collection<java.lang.String>> as com.orientechnologies.orient.core.db.record.OTrackedMap, problem: Type parameter #1/2 differs; can not specialize java.lang.String with java.lang.Object (through reference chain: com.example.jackson.AccessModel["repositoryPrivileges"])

	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:391)
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:351)
	at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:316)
	at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:727)
	at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
	at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3893)
	at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3207)
	at com.example.jackson.JacksonTest.testSerialization(JacksonTest.java:37)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	[...]

You can take a look at this gist to see an example.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions