-
-
Notifications
You must be signed in to change notification settings - Fork 230
Closed
Labels
2.15For issues planned for 2.15For issues planned for 2.15
Milestone
Description
As in #491, I've found an additional issue where parsing empty tags without default constructor fails. This worked in 2.11.3, but has failed since.
Check should_parse_empty_tag_without_default_constructor() in https://github.com/henrik242/jackson-xml-problem/blob/no-string-argument/src/test/java/jackson/xml/NoStringArgumentTest.java#L37
Test (java):
@Test
void should_parse_empty_tag_without_default_constructor() {
String xml = "<outer><inner></inner></outer>";
Outer res = XmlTool.parseOuter(xml);
assertEquals(res, new Outer(null)); // SUCCESS in Jackson 2.11.x, but FAIL in 2.14.x
}
Code (kotlin):
object XmlTool {
val xmlIn = XMLInputFactory.newInstance()
val factory = XmlFactory(xmlIn)
val xmlModule = JacksonXmlModule()
val mapper = XmlMapper(factory, xmlModule).registerKotlinModule()
@JvmStatic
fun parseOuter(xml: String?): Outer = mapper.readValue(xml, Outer::class.java)
data class Inner(val code: String?)
data class Outer(val inner: Inner?)
}
Fails with:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `jackson.xml.XmlTool$Inner` (although at least one Creator exists): no default no-arguments constructor found
at [Source: (StringReader); line: 1, column: 15] (through reference chain: jackson.xml.XmlTool$Outer["inner"])
at app//com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
at app//com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1733)
at app//com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1358)
at app//com.fasterxml.jackson.databind.deser.ValueInstantiator.createUsingDefault(ValueInstantiator.java:248)
at app//com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createUsingDefault(StdValueInstantiator.java:275)
at app//com.fasterxml.jackson.databind.deser.BeanDeserializerBase.getEmptyValue(BeanDeserializerBase.java:1042)
at app//com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromEmptyString(StdDeserializer.java:322)
at app//com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromString(StdDeserializer.java:270)
at app//com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1500)
at app//com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:197)
at app//com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)
at app//com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:542)
at app//com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:564)
at app//com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:439)
at app//com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1405)
at app//com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352)
at app//com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185)
at app//com.fasterxml.jackson.dataformat.xml.deser.XmlDeserializationContext.readRootValue(XmlDeserializationContext.java:91)
at app//com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4697)
at app//com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3652)
at app//com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3620)
at app//jackson.xml.XmlTool.parseOuter(XmlTool.kt:22)
at app//jackson.xml.NoStringArgumentTest.should_parse_empty_tag_without_default_constructor(NoStringArgumentTest.java:39)
at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at [email protected]/java.lang.reflect.Method.invoke(Method.java:566)
at app//org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675)
at app//org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at ...
This is the exact same issue as mentioned in FasterXML/jackson-module-kotlin#396, and is already covered a couple of places with existing failing tests:
- https://github.com/FasterXML/jackson-integration-tests/blob/master/src/test/kotlin/com/fasterxml/jackson/failing/Jackson212MissingConstructorTest.kt (see Add kotlin/xml related test for regression in Jackson 2.12.x jackson-integration-tests#7)
- https://github.com/FasterXML/jackson-module-kotlin/blob/master/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/github/failing/Github396.kt
magicaljellybeans and jsuryakt
Metadata
Metadata
Assignees
Labels
2.15For issues planned for 2.15For issues planned for 2.15