-
-
Notifications
You must be signed in to change notification settings - Fork 179
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