Skip to content

Exception deserializing a byte[] when the target type comes from an annotation #890

Closed
@gmjabs

Description

@gmjabs

When trying to deserialize a byte[] from a Map when the deserialization type comes from an annotation, I'm seeing the following exception:

java.lang.IllegalArgumentException: Can not deserialize Class [B (of type array) as a Bean
        at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.isPotentialBeanType(BeanDeserializerFactory.java:808)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:138)
        at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:403)
        at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:352)
        at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
        at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
        at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
        at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:428)
        at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:947)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:439)
        at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:296)
        at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
        at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
        at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:461)
        at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3804)
        at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3418)
        at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3351)

The below is a repro.

public class JacksonTest {

    static class Foo {
        @JsonProperty
        @JsonDeserialize(as=byte[].class)
        Object someBytes;
    }

    public void testFooFromMap() {

        Map<String, Object> map = new HashMap<>();
        map.put("someBytes", "HelloWorld".getBytes());

        ObjectMapper m = new ObjectMapper();
        m.convertValue(map, Foo.class);
    }
}

I discovered this on 2.5.1, but I tried 2.6.0 and it's exhibiting the same behavior.

Thanks!

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