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)