diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XsiNil354Test.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XsiNil354Test.java index f1bdde4f1..27d487ad4 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XsiNil354Test.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XsiNil354Test.java @@ -14,6 +14,20 @@ public DoubleWrapper(Double value) { } } + protected static class Parent { + public Level1 level1; + } + + protected static class Level1 { + public Level2 level2; + public String field; // this should not be needed, but an unknown element is thrown without it + } + + protected static class Level2 { + public String ignored; + public String field; + } + private final XmlMapper MAPPER = newMapper(); public void testWithDoubleAsNull() throws Exception @@ -29,7 +43,7 @@ public void testWithDoubleAsNull() throws Exception DoubleWrapper.class); assertNotNull(bean); assertNull(bean.d); - + // actually we should perhaps also verify there is no content but... for now, let's leave it. } @@ -57,4 +71,25 @@ public void testRootPojoAsNonNull() throws Exception Point.class); assertNotNull(bean); } + + public void testDoesNotAffectHierarchy() throws Exception + { + String xml = "" + + "" + + "" + + "" + + "test-value" + + "" + + "" + + ""; + Parent bean = MAPPER.readValue(xml, Parent.class); + + assertNotNull(bean); + + // this should not be set, but having an xsi:nil field before it causes it to set the next field on the wrong class + assertEquals("test-value", bean.level1.field); + + // fails because field is set on level1 instead of on level2 + assertEquals("test-value", bean.level1.level2.field); + } }