-
- Notifications
You must be signed in to change notification settings - Fork 233
Open
Description
Jackson seems to be overwriting the older sibling nodes if the order is mixed. See below test case. Seems to be a bug. Thanks.
@JacksonXmlRootElement data class RootNode( @JacksonXmlElementWrapper(useWrapping = false) @JacksonXmlProperty(localName = "NodeA") val nodeA: List<NodeA>, @JacksonXmlProperty(localName = "NodeB") val nodeB: NodeB ) data class NodeA( @JacksonXmlProperty(localName = "attr", isAttribute = true) val attr: String ) data class NodeB( @JacksonXmlProperty(localName = "attr", isAttribute = true) val attr: String ) class ReadXMLTest { @Test fun canRead() { val xml = """ <RootNode> <NodeA attr="123"/> <NodeB attr="ABC"/> <NodeA attr="456"/> </RootNode> """.trimIndent() val xmlMapper = XmlMapper() xmlMapper.registerModule(kotlinModule()) assertEquals( RootNode( listOf(NodeA("123"), NodeA("456")), NodeB("ABC") ), xmlMapper.readValue<RootNode>(xml) ) } } This fails with
Expected :RootNode(nodeA=[NodeA(attr=123), NodeA(attr=456)], nodeB=NodeB(attr=ABC)) Actual :RootNode(nodeA=[NodeA(attr=456)], nodeB=NodeB(attr=ABC)) If the XML is like below, then it passes.
<RootNode> <NodeA attr="123"/> <NodeA attr="456"/> <NodeB attr="ABC"/> </RootNode> Metadata
Metadata
Assignees
Labels
No labels