- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 181
Closed
Labels
xmlRelated to XML handlingRelated to XML handling
Milestone
Description
I have this Kotlin object which parses an XML into a data class:
object XmlTool {
    @JvmStatic
    fun parseXml(xml: String?): Product {
        val xmlIn = XMLInputFactory.newInstance()
        val factory = XmlFactory(xmlIn)
        val xmlModule = JacksonXmlModule()
        val mapper = XmlMapper(factory, xmlModule).registerKotlinModule()
        return mapper.readValue(xml, Product::class.java)
    }
    data class Stuff(val str: String?)
    data class Product(val stuff: Stuff?)
}
And this Java test:
class Jackson212MissingConstructorTest {
    @Test
    void fails_with_jackson_2_12() throws Exception {
        String xml = "<product><stuff></stuff></product>";
        Product product = XmlTool.parseXml(xml);
        assertEquals(new Product(null), product);
    }
}
Parsing this in Jackson 2.12.0 fails with com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of jackson.xml.XmlTool$Stuff (although at least one Creator exists): no default no-arguments constructor found.
Jackson 2.11.3 works just fine.
The full exception is:
jackson.xml.Jackson212MissingConstructorTest > fails_with_jackson_2_12() 
    com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `jackson.xml.XmlTool$Stuff` (although at least one Creator exists): no default no-arguments constructor found
     at [Source: (StringReader); line: 1, column: 17] (through reference chain: jackson.xml.XmlTool$Product["stuff"])
        at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
        at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1590)
        at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1215)
        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:1027)
        at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromEmptyString(StdDeserializer.java:322)
        at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromString(StdDeserializer.java:271)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1480)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:207)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:197)
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:542)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:565)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:449)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1390)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:362)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:195)
        at com.fasterxml.jackson.dataformat.xml.deser.XmlDeserializationContext.readRootValue(XmlDeserializationContext.java:91)
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4568)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3523)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3491)
        at jackson.xml.XmlTool.parseXml(XmlTool.kt:19)
        at jackson.xml.Jackson212MissingConstructorTest.fails_with_jackson_2_12(Jackson212MissingConstructorTest.java:14)
Here's a test project: https://github.com/henrik242/jackson-xml-problem/tree/2-12-empty-constructor
hrkfdn, knut-olav-hoven-ske and jsuryaktmichaelbrewermichaelbrewer
Metadata
Metadata
Assignees
Labels
xmlRelated to XML handlingRelated to XML handling