XmlMapper does not find no-argument record constructor for deserialization of empty XML · Issue #542 · FasterXML/jackson-dataformat-xml (original) (raw)

Replicated with Jackson 2.13.3

Might be related to #508

Unlike XmlMapper is not able to find no-argument record constructor for deserialization of emptzy document even if one is explicitly defined

public class NoArgumentConstructorTest {

  public record TestRecord(@Nullable String a) {

    public TestRecord() {
      this(null);
    }
  }

  @Test
  void testNoArgumentConstructorXml() throws JsonProcessingException {
    var xmlMapper = new XmlMapper();
    assertThat(xmlMapper.readerFor(TestRecord.class).readValue("<TEST/>"))
        .isNotNull();
  }
}
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.provys.serverapi.restapi.obj.api.NoArgumentConstructorTest$TestRecord` (although at least one Creator exists): no default no-arguments constructor found
 at [Source: (StringReader); line: 1, column: 1]

    at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
    at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1728)
    at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1353)
    at com.fasterxml.jackson.databind.deser.ValueInstantiator.createUsingDefault(ValueInstantiator.java:248)
    at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createUsingDefault(StdValueInstantiator.java:275)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.getEmptyValue(BeanDeserializerBase.java:1042)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromEmptyString(StdDeserializer.java:322)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromString(StdDeserializer.java:270)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1495)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:196)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:186)
    at com.fasterxml.jackson.dataformat.xml.deser.XmlDeserializationContext.readRootValue(XmlDeserializationContext.java:91)
    at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2051)
    at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1492)
    at com.provys.serverapi.restapi.obj.api.NoArgumentConstructorTest.testNoArgumentConstructorXml(NoArgumentConstructorTest.java:30)