Skip to content

Blackbird fails to deserialize varargs array #141

@naveg

Description

@naveg

The following code snippet fails. However, the same snippet works if either Blackbird is removed, or the constructor argument is changed to use double[] notation instead of double...

public class Scratch {
  public static void main(String[] args) throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new BlackbirdModule());

    Foo foo = new Foo(new double[] { 1d, 2d, 3d });
    String serialized = mapper.writeValueAsString(foo);
    Foo foo2 = mapper.readValue(serialized, Foo.class);
  }

  static class Foo {

    @JsonProperty("bar")
    double[] bar;

    @JsonCreator
    public Foo(@JsonProperty("bar") double... bar) {
      this.bar = bar;
    }
  }
}
Exception in thread "main" com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `com.alloymetrics.restapi.Scratch$Foo`, problem: class [D cannot be cast to class java.lang.Number ([D and java.lang.Number are in module java.base of loader 'bootstrap')
 at [Source: (String)"{"bar":[1.0,2.0,3.0]}"; line: 1, column: 21]
	at com.fasterxml.jackson.databind.exc.ValueInstantiationException.from(ValueInstantiationException.java:47)
	at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1907)
	at com.fasterxml.jackson.databind.DeserializationContext.handleInstantiationProblem(DeserializationContext.java:1260)
	at com.fasterxml.jackson.module.blackbird.deser.OptimizedValueInstantiator.createFromObjectWith(OptimizedValueInstantiator.java:51)
	at com.fasterxml.jackson.databind.deser.ValueInstantiator.createFromObjectWith(ValueInstantiator.java:288)
	at com.fasterxml.jackson.databind.deser.impl.PropertyBasedCreator.build(PropertyBasedCreator.java:202)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:454)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1405)
	at com.fasterxml.jackson.module.blackbird.deser.SuperSonicBeanDeserializer.deserializeFromObject(SuperSonicBeanDeserializer.java:247)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:195)
	at com.fasterxml.jackson.module.blackbird.deser.SuperSonicBeanDeserializer.deserialize(SuperSonicBeanDeserializer.java:116)
	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3516)

Metadata

Metadata

Assignees

No one assigned

    Labels

    blackbirdIssue related to Blackbird module

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions