Skip to content

XmlMapper does not find no-argument record constructor for deserialization of empty XML #542

Description

@MichalStehlikCz

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)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions