[Git][java-team/jackson-dataformat-xml][master] 8 commits: Update copyright years

Markus Koschany (@apo) gitlab at salsa.debian.org
Tue Sep 7 09:48:38 BST 2021



Markus Koschany pushed to branch master at Debian Java Maintainers / jackson-dataformat-xml


Commits:
4ef23804 by Markus Koschany at 2021-09-07T10:18:38+02:00
Update copyright years

- - - - -
54e3c414 by Markus Koschany at 2021-09-07T10:19:08+02:00
Declare compliance with Debian Policy 4.6.0.

- - - - -
482e09e1 by Markus Koschany at 2021-09-07T10:19:29+02:00
Update jackson-base-version.patch

- - - - -
043de555 by Markus Koschany at 2021-09-07T10:38:18+02:00
Update debian/watch

- - - - -
d11b2b3b by Markus Koschany at 2021-09-07T10:41:24+02:00
New upstream version 2.12.5
- - - - -
ddb0fdc9 by Markus Koschany at 2021-09-07T10:41:28+02:00
Update upstream source from tag 'upstream/2.12.5'

Update to upstream version '2.12.5'
with Debian dir f116be617fa14a465e75542dca2e1aa40270f5ef
- - - - -
8b7d0364 by Markus Koschany at 2021-09-07T10:42:52+02:00
Update changelog

- - - - -
743de2b0 by Markus Koschany at 2021-09-07T10:44:13+02:00
Ignore com.sun.xml.stream:sjsxp:jar:debian

- - - - -


30 changed files:

- debian/changelog
- debian/control
- debian/copyright
- debian/maven.ignoreRules
- debian/patches/jackson-base-version.patch
- debian/watch
- pom.xml
- release-notes/CREDITS-2.x
- release-notes/VERSION-2.x
- src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactory.java
- src/main/java/com/fasterxml/jackson/dataformat/xml/XmlMapper.java
- src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java
- src/main/java/com/fasterxml/jackson/dataformat/xml/deser/WrapperHandlingDeserializer.java
- src/main/java/com/fasterxml/jackson/dataformat/xml/deser/XmlReadContext.java
- src/main/java/com/fasterxml/jackson/dataformat/xml/deser/XmlTokenStream.java
- src/main/java/com/fasterxml/jackson/dataformat/xml/util/StaxUtil.java
- src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EmptyStringValueTest.java
- + src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EmptyWithScalarsTest.java
- src/test/java/com/fasterxml/jackson/dataformat/xml/deser/UntypedObjectDeserTest.java
- src/test/java/com/fasterxml/jackson/dataformat/xml/failing/JsonNodeBasicSer441Test.java
- + src/test/java/com/fasterxml/jackson/dataformat/xml/failing/XmlParserErrorHandling463Test.java
- + src/test/java/com/fasterxml/jackson/dataformat/xml/failing/XsiNilEnableDisable467Test.java
- + src/test/java/com/fasterxml/jackson/dataformat/xml/interop/NonWoodstoxStaxImpl482Test.java
- src/test/java/com/fasterxml/jackson/dataformat/xml/lists/EmptyListDeserTest.java
- + src/test/java/com/fasterxml/jackson/dataformat/xml/lists/ListDeser469Test.java
- src/test/java/com/fasterxml/jackson/dataformat/xml/lists/ListDeserializationTest.java
- src/test/java/com/fasterxml/jackson/dataformat/xml/lists/ListSerializationTest.java
- src/test/java/com/fasterxml/jackson/dataformat/xml/lists/ListWithAttributesDeserTest.java
- src/test/java/com/fasterxml/jackson/dataformat/xml/lists/UnwrappedListsTest.java
- src/test/java/com/fasterxml/jackson/dataformat/xml/misc/PolymorphicTypesTest.java


Changes:

=====================================
debian/changelog
=====================================
@@ -1,3 +1,10 @@
+jackson-dataformat-xml (2.12.5-1) unstable; urgency=medium
+
+  * New upstream version 2.12.5.
+  * Declare compliance with Debian Policy 4.6.0.
+
+ -- Markus Koschany <apo at debian.org>  Tue, 07 Sep 2021 10:42:23 +0200
+
 jackson-dataformat-xml (2.12.1-1) unstable; urgency=medium
 
   * Team upload.


=====================================
debian/control
=====================================
@@ -25,7 +25,7 @@ Build-Depends:
  libstax2-api-java (>= 3.1.1),
  maven-debian-helper (>= 1.5),
  xmlstarlet
-Standards-Version: 4.5.1
+Standards-Version: 4.6.0
 Vcs-Git: https://salsa.debian.org/java-team/jackson-dataformat-xml.git
 Vcs-Browser: https://salsa.debian.org/java-team/jackson-dataformat-xml
 Homepage: https://github.com/FasterXML/jackson-dataformat-xml


=====================================
debian/copyright
=====================================
@@ -5,14 +5,14 @@ Files-Excluded:
  docs/*
 
 Files: *
-Copyright: 2015-2020, FasterXML, LLC, Seattle, USA <info at fasterxml.com>
+Copyright: 2015-2021, FasterXML, LLC, Seattle, USA <info at fasterxml.com>
 License: Apache-2.0
 Comment:
  See src/main/resources/META-INF/LICENSE and
  http://wiki.fasterxml.com/JacksonLicensing
 
 Files: debian/*
-Copyright: 2015-2020, Markus Koschany <apo at debian.org>
+Copyright: 2015-2021, Markus Koschany <apo at debian.org>
 License: Apache-2.0
 
 License: Apache-2.0


=====================================
debian/maven.ignoreRules
=====================================
@@ -6,3 +6,4 @@ junit junit * * * *
 org.moditect moditect-maven-plugin * * * *
 jakarta.xml.bind jakarta.xml.bind-api * * * *
 org.jacoco jacoco-maven-plugin * * * *
+com.sun.xml.stream sjsxp * * * *


=====================================
debian/patches/jackson-base-version.patch
=====================================
@@ -12,7 +12,7 @@ Subject: jackson base version
    <parent>
      <groupId>com.fasterxml.jackson</groupId>
      <artifactId>jackson-base</artifactId>
--    <version>2.12.1</version>
+-    <version>2.12.5</version>
 +    <version>debian</version>
    </parent>
    <groupId>com.fasterxml.jackson.dataformat</groupId>


=====================================
debian/watch
=====================================
@@ -1,4 +1,4 @@
-version=3
+version=4
 opts=dversionmangle=s/(\da?)[\+\.\-~](?:dfsg|debian|ds|repack|repacked)\.?\d*$/$1/,uversionmangle=s/_/./g;s/\.Beta/~beta/;s/\.pr\d//;s/\.Final//;s/-rc/~rc/ \
-https://github.com/FasterXML/jackson-dataformat-xml/tags \
-.*/archive/(?:upstream/)?(?:v||version-|release-|X|R|r)jackson-dataformat-xml-(\d\S*)\.tar\.gz
+https://github.com/FasterXML/jackson-dataformat-xml/releases \
+ .*/jackson-dataformat-xml-?@ANY_VERSION@@ARCHIVE_EXT@


=====================================
pom.xml
=====================================
@@ -9,11 +9,11 @@
   <parent>
     <groupId>com.fasterxml.jackson</groupId>
     <artifactId>jackson-base</artifactId>
-    <version>2.12.1</version>
+    <version>2.12.5</version>
   </parent>
   <groupId>com.fasterxml.jackson.dataformat</groupId>
   <artifactId>jackson-dataformat-xml</artifactId>
-  <version>2.12.1</version>
+  <version>2.12.5</version>
   <name>Jackson-dataformat-XML</name>
   <packaging>bundle</packaging>
   <description>Data format extension for Jackson to offer
@@ -24,7 +24,7 @@ alternative support for serializing POJOs as XML and deserializing XML as pojos.
     <connection>scm:git:git at github.com:FasterXML/jackson-dataformat-xml.git</connection>
     <developerConnection>scm:git:git at github.com:FasterXML/jackson-dataformat-xml.git</developerConnection>
     <url>http://github.com/FasterXML/jackson-dataformat-xml</url>    
-    <tag>jackson-dataformat-xml-2.12.1</tag>
+    <tag>jackson-dataformat-xml-2.12.5</tag>
   </scm>
   <properties>
     <packageVersion.dir>com/fasterxml/jackson/dataformat/xml</packageVersion.dir>
@@ -90,7 +90,7 @@ alternative support for serializing POJOs as XML and deserializing XML as pojos.
     <dependency>
       <groupId>com.fasterxml.woodstox</groupId>
       <artifactId>woodstox-core</artifactId>
-      <version>6.2.3</version>
+      <version>6.2.4</version>
       <exclusions>
         <exclusion>
 	  <groupId>javax.xml.stream</groupId>
@@ -109,6 +109,15 @@ alternative support for serializing POJOs as XML and deserializing XML as pojos.
       <version>2.3.2</version>
       <scope>test</scope>
     </dependency>
+    <!-- 03-Jul-2021, tatu: For sanity checking of non-Woodstox impl usage
+        need, say, Sjsxp
+      -->
+    <dependency>
+      <groupId>com.sun.xml.stream</groupId>
+      <artifactId>sjsxp</artifactId>
+      <version>1.0.2</version>
+      <scope>test</scope>
+    </dependency>
 
     <dependency>
       <groupId>junit</groupId>


=====================================
release-notes/CREDITS-2.x
=====================================
@@ -120,7 +120,10 @@ Migwel at github
 * Contributed #360: Add a feature to support writing `xsi:nil` attribute for
   `null` values
  (2.12.0)
- 
+* Contributed fix for #445: `XmlMapper`/`UntypedObjectDeserializer` mixes
+  multiple unwrapped collections
+ (2.12.2)
+
 Ingo Wiarda (dewarim at github)
 
 * Reported #374: Deserialization fails with `XmlMapper` and
@@ -147,3 +150,13 @@ Francesco Chicchiriccò (ilgrosso at github)
 
 * Reported #435: After upgrade to 2.12.0, NPE when deserializing an empty element to `ArrayList`
  (2.12.1)
+
+Westin Miller (westinrm at github)
+
+* Contributed #456: Fix JsonAlias with unwrapped lists
+ (2.12.3)
+
+Tim Jacomb (timja at github)
+
+* Reported #482: Use of non-Stax2-compatible Stax2 implementation fails when reading
+ (2.12.4)


=====================================
release-notes/VERSION-2.x
=====================================
@@ -4,6 +4,36 @@ Project: jackson-dataformat-xml
 === Releases ===
 ------------------------------------------------------------------------
 
+2.12.5 (27-Aug-2021)
+
+No changes since 2.12.4
+
+2.12.4 (06-Jul-2021)
+
+#469: Empty tags cause incorrect deserialization of unwrapped lists
+ (reported by jackson-code1 at github)
+#473: Parsing of `null` Integer fields changed behavior between versions
+   2.11.4 and 2.12.X
+ (reported by Steviep at github)
+#482: Use of non-Stax2-compatible Stax2 implementation fails when reading
+  from byte[]
+ (reported by Tim J)
+
+2.12.3 (12-Apr-2021)
+
+#456: Fix JsonAlias with unwrapped lists
+ (contributed by Westin M)
+#460: Deserialization from blank (not empty) String fails for Collections
+
+2.12.2 (03-Mar-2021)
+
+#445: `XmlMapper`/`UntypedObjectDeserializer` mixes multiple unwrapped collections
+ (fix contributed by Migwel at github)
+#451: Xml type resolver fails with NPE when property name is not specified in
+  polymorphic (de)serialization
+ (reported by MichalStehlikCz at github)
+- Woodstox dependency 6.2.4 (from 6.2.3)
+
 2.12.1 (08-Jan-2021)
 
 #435: After upgrade to 2.12.0, NPE when deserializing an empty element to `ArrayList`


=====================================
src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactory.java
=====================================
@@ -4,6 +4,7 @@ import java.io.*;
 
 import javax.xml.stream.*;
 
+import org.codehaus.stax2.XMLInputFactory2;
 import org.codehaus.stax2.io.Stax2ByteArraySource;
 import org.codehaus.stax2.io.Stax2CharArraySource;
 
@@ -610,7 +611,13 @@ public class XmlFactory extends JsonFactory
         //    is always same as if 'false' was passed
         XMLStreamReader sr;
         try {
-            sr = _xmlInputFactory.createXMLStreamReader(new Stax2CharArraySource(data, offset, len));
+            // 03-Jul-2021, tatu: [dataformat-xml#482] non-Stax2 impls unlikely to
+            //    support so avoid:
+            if (_xmlInputFactory instanceof XMLInputFactory2) {
+                sr = _xmlInputFactory.createXMLStreamReader(new Stax2CharArraySource(data, offset, len));
+            } else {
+                sr = _xmlInputFactory.createXMLStreamReader(new CharArrayReader(data, offset, len));
+            }
         } catch (XMLStreamException e) {
             return StaxUtil.throwAsParseException(e, null);
         }
@@ -628,7 +635,13 @@ public class XmlFactory extends JsonFactory
     {
         XMLStreamReader sr;
         try {
-            sr = _xmlInputFactory.createXMLStreamReader(new Stax2ByteArraySource(data, offset, len));
+            // 03-Jul-2021, tatu: [dataformat-xml#482] non-Stax2 impls unlikely to
+            //    support so avoid:
+            if (_xmlInputFactory instanceof XMLInputFactory2) {
+                sr = _xmlInputFactory.createXMLStreamReader(new Stax2ByteArraySource(data, offset, len));
+            } else {
+                sr = _xmlInputFactory.createXMLStreamReader(new ByteArrayInputStream(data, offset, len));
+            }
         } catch (XMLStreamException e) {
             return StaxUtil.throwAsParseException(e, null);
         }


=====================================
src/main/java/com/fasterxml/jackson/dataformat/xml/XmlMapper.java
=====================================
@@ -16,6 +16,7 @@ import com.fasterxml.jackson.databind.cfg.MapperBuilder;
 import com.fasterxml.jackson.databind.deser.BeanDeserializerFactory;
 import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;
 import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
+import com.fasterxml.jackson.databind.type.LogicalType;
 import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser;
 import com.fasterxml.jackson.dataformat.xml.deser.XmlDeserializationContext;
 import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
@@ -177,7 +178,15 @@ public class XmlMapper extends ObjectMapper
             .setAcceptBlankAsEmpty(Boolean.TRUE)
             // and then coercion from empty String to empty value, in general
             .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty)
-        ;
+            ;
+        // 03-May-2021, tatu: ... except make sure to keep "empty to Null" for
+        //   scalar types...
+        coercionConfigFor(LogicalType.Integer)
+            .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsNull);
+        coercionConfigFor(LogicalType.Float)
+            .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsNull);
+        coercionConfigFor(LogicalType.Boolean)
+            .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsNull);
     }
 
     /**


=====================================
src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java
=====================================
@@ -1361,6 +1361,10 @@ XmlTokenStream.XML_END_ELEMENT, XmlTokenStream.XML_START_ELEMENT, token));
             return _xmlTokens.next();
         } catch (XMLStreamException e) {
             return StaxUtil.throwAsParseException(e, this);
+        } catch (IllegalStateException e) {
+            // 08-Apr-2021, tatu: Should improve on this, wrt better information
+            //   on issue.
+            throw new JsonParseException(this, e.getMessage(), e);
         }
     }
 


=====================================
src/main/java/com/fasterxml/jackson/dataformat/xml/deser/WrapperHandlingDeserializer.java
=====================================
@@ -4,6 +4,7 @@ import java.io.IOException;
 import java.util.*;
 
 import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
 import com.fasterxml.jackson.core.util.JsonParserDelegate;
 import com.fasterxml.jackson.databind.*;
 import com.fasterxml.jackson.databind.deser.*;
@@ -96,6 +97,9 @@ public class WrapperHandlingDeserializer
             }
             // not optimal; should be able to use PropertyName...
             unwrappedNames.add(prop.getName());
+            for (PropertyName alias : prop.findAliases(ctxt.getConfig())) {
+                unwrappedNames.add(alias.getSimpleName());
+            }
         }
         // Ok: if nothing to take care of, just return the delegatee...
         if (unwrappedNames == null) {
@@ -151,7 +155,14 @@ public class WrapperHandlingDeserializer
             p = ((JsonParserDelegate) p).delegate();
         }
         if (p instanceof FromXmlParser) {
-            ((FromXmlParser) p).addVirtualWrapping(_namesToWrap, _caseInsensitive);
+            // 03-May-2021, tatu: as per [dataformat-xml#469] there are special
+            //   cases where we get String token to represent XML empty element.
+            //   If so, need to refrain from adding wrapping as that would
+            //   override parent settings
+            JsonToken t = p.currentToken();
+            if (t == JsonToken.START_OBJECT || t == JsonToken.START_ARRAY) {
+                ((FromXmlParser) p).addVirtualWrapping(_namesToWrap, _caseInsensitive);
+            }
         }
     }
     


=====================================
src/main/java/com/fasterxml/jackson/dataformat/xml/deser/XmlReadContext.java
=====================================
@@ -42,20 +42,19 @@ public final class XmlReadContext
     protected String _wrappedName;
 
     /*
-    /**********************************************************
-    /* Simple instance reuse slots; speeds up things
-    /* a bit (10-15%) for docs with lots of small
-    /* arrays/objects (for which allocation was
+    /**********************************************************************
+    /* Simple instance reuse slots; speeds up things a bit (10-15%)
+    /* for docs with lots of small arrays/objects (for which allocation was
     /* visible in profile stack frames)
-    /**********************************************************
+    /**********************************************************************
      */
 
     protected XmlReadContext _child = null;
 
     /*
-    /**********************************************************
+    /**********************************************************************
     /* Instance construction, reuse
-    /**********************************************************
+    /**********************************************************************
      */
 
     public XmlReadContext(XmlReadContext parent, int type, int lineNr, int colNr)
@@ -90,9 +89,9 @@ public final class XmlReadContext
     }
 
     /*
-    /**********************************************************
+    /**********************************************************************
     /* Factory methods
-    /**********************************************************
+    /**********************************************************************
      */
 
     public static XmlReadContext createRootContext(int lineNr, int colNr) {
@@ -128,9 +127,9 @@ public final class XmlReadContext
     }
 
     /*
-    /**********************************************************
+    /**********************************************************************
     /* Abstract method implementation, overrides
-    /**********************************************************
+    /**********************************************************************
      */
 
     @Override
@@ -155,9 +154,9 @@ public final class XmlReadContext
     }
 
     /*
-    /**********************************************************
+    /**********************************************************************
     /* Extended API
-    /**********************************************************
+    /**********************************************************************
      */
 
     /**
@@ -188,9 +187,9 @@ public final class XmlReadContext
     }
     
     /*
-    /**********************************************************
+    /**********************************************************************
     /* Overridden standard methods
-    /**********************************************************
+    /**********************************************************************
      */
 
     /**


=====================================
src/main/java/com/fasterxml/jackson/dataformat/xml/deser/XmlTokenStream.java
=====================================
@@ -58,9 +58,9 @@ public class XmlTokenStream
     /**********************************************************************
      */
 
-    final protected XMLStreamReader2 _xmlReader;
+    protected final XMLStreamReader2 _xmlReader;
 
-    final protected Object _sourceReference;
+    protected final Object _sourceReference;
 
     /**
      * Bit flag composed of bits that indicate which
@@ -141,7 +141,7 @@ public class XmlTokenStream
      */
     protected String _nextLocalName;
     protected String _nextNamespaceURI;
-    
+
     /*
     /**********************************************************************
     /* Life-cycle
@@ -424,7 +424,8 @@ public class XmlTokenStream
                     throw new IllegalStateException("Unexpected end-of-input after null token");
                 default:
                 }
-                throw new IllegalStateException("Unexpected START_ELEMENT after null token");
+                throw new IllegalStateException(
+"Unexpected START_ELEMENT after null token (inside element with 'xsi:nil' attribute)");
             }
             if (_nextAttributeIndex < _attributeCount) {
 //System.out.println(" XmlTokenStream._next(): Got attr(s)!");


=====================================
src/main/java/com/fasterxml/jackson/dataformat/xml/util/StaxUtil.java
=====================================
@@ -75,6 +75,12 @@ public class StaxUtil
      */
     public static String sanitizeXmlTypeName(String name)
     {
+        // [dataformat-xml#451]: with DEDUCTION, at least, won't have property name
+        //   (but probably sensible to check for it anyway)
+        if (name == null) {
+            return null;
+        }
+        
         StringBuilder sb;
         int changes = 0;
         // First things first: remove array types' trailing[]...


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EmptyStringValueTest.java
=====================================
@@ -49,9 +49,9 @@ public class EmptyStringValueTest extends XmlTestBase
     }
     
     /*
-    /**********************************************************
+    /**********************************************************************
     /* Test methods
-    /**********************************************************
+    /**********************************************************************
      */
 
     private final XmlMapper MAPPER = newMapper();


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EmptyWithScalarsTest.java
=====================================
@@ -0,0 +1,158 @@
+package com.fasterxml.jackson.dataformat.xml.deser;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+
+// [dataformat-xml#473]: 2.11 -> 2.12 coercion of empty to "default"
+// [dataformat-xml#474]: no failure for primitives, no null
+public class EmptyWithScalarsTest extends XmlTestBase
+{
+    @JacksonXmlRootElement(localName = "w")
+    static class NumbersPrimitive {
+        public int i = 1;
+        public long l = 2L;
+
+        public double d = 0.5;
+        public float f = 0.25f;
+    }
+
+    @JacksonXmlRootElement(localName = "w")
+    static class NumbersWrapper {
+        public Integer I = Integer.valueOf(1);
+        public Long L = Long.valueOf(1L);
+
+        public Double D = Double.valueOf(0.5);
+        public Float F = Float.valueOf(0.5f);
+    }
+
+    @JacksonXmlRootElement(localName = "w")
+    static class NumbersOther {
+        public BigInteger bi = BigInteger.ONE;
+        public BigDecimal bd = BigDecimal.ONE;
+    }
+
+    @JacksonXmlRootElement(localName = "w")
+    static class MiscOther {
+        public Boolean B = Boolean.TRUE;
+    }
+
+    private final XmlMapper MAPPER = newMapper();
+
+    /*
+    /**********************************************************************
+    /* Test methods, Numbers / primitive
+    /**********************************************************************
+     */
+
+    public void testPrimitiveIntsWithEmpty() throws Exception
+    {
+        NumbersPrimitive p = MAPPER.readValue(_emptyWrapped("i"),
+                NumbersPrimitive.class);
+        assertEquals(0, p.i);
+        p = MAPPER.readValue(_emptyWrapped("l"),
+                NumbersPrimitive.class);
+        assertEquals(0L, p.l);
+    }
+
+    public void testPrimitiveFPsWithEmpty() throws Exception
+    {
+        NumbersPrimitive p = MAPPER.readValue(_emptyWrapped("d"),
+                NumbersPrimitive.class);
+        assertEquals(0d, p.d);
+        p = MAPPER.readValue(_emptyWrapped("f"),
+                NumbersPrimitive.class);
+        assertEquals(0f, p.f);
+    }
+
+    // [dataformat-xml#474]: no failure for primitives, no null
+    // (will try to fix in 2.13, but not 2.12)
+    public void testPrimitivesNoNulls() throws Exception
+    {
+        /*
+        ObjectReader r = MAPPER
+                .readerFor(NumbersPrimitive.class)
+                .with(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES);
+        _testPrimitivesNoNulls(r, _emptyWrapped("i"));
+        _testPrimitivesNoNulls(r, _emptyWrapped("l"));
+        _testPrimitivesNoNulls(r, _emptyWrapped("d"));
+        _testPrimitivesNoNulls(r, _emptyWrapped("f"));
+    }
+
+    private void _testPrimitivesNoNulls(ObjectReader r, String doc) throws Exception
+    {
+        try {
+            r.readValue(_emptyWrapped("i"));
+            fail("Should not pass");
+        } catch (MismatchedInputException e) {
+            verifyException(e, "Cannot coerce empty String");
+        }
+        */
+    }
+
+    /*
+    /**********************************************************************
+    /* Test methods, Numbers / wrapper (or Object)
+    /**********************************************************************
+     */
+
+    public void testIntegralsWithEmpty() throws Exception
+    {
+        NumbersWrapper w = MAPPER.readValue(_emptyWrapped("I"),
+                NumbersWrapper.class);
+        assertNull(w.I);
+        w = MAPPER.readValue(_emptyWrapped("L"),
+                NumbersWrapper.class);
+        assertNull(w.L);
+
+        NumbersOther o = MAPPER.readValue(_emptyWrapped("bi"),
+                NumbersOther.class);
+        assertNull(o.bi);
+    }
+
+    public void testFPWithEmpty() throws Exception
+    {
+        NumbersWrapper w = MAPPER.readValue(_emptyWrapped("D"),
+                NumbersWrapper.class);
+        assertNull(w.D);
+        w = MAPPER.readValue(_emptyWrapped("F"),
+                NumbersWrapper.class);
+        assertNull(w.F);
+
+        NumbersOther o = MAPPER.readValue(_emptyWrapped("bd"),
+                NumbersOther.class);
+        assertNull(o.bd);
+    }
+
+    /*
+    /**********************************************************************
+    /* Test methods, otber Scalars
+    /**********************************************************************
+     */
+
+    public void testOtherScalarWithEmpty() throws Exception
+    {
+        MiscOther o = MAPPER.readValue(_emptyWrapped("B"),
+                MiscOther.class);
+        assertNull(o.B);
+    }
+
+    /*
+    /**********************************************************************
+    /* Internal methods
+    /**********************************************************************
+     */
+
+    private String _emptyWrapped(String name) {
+        return _simpleWrapped(name, "");
+    }
+
+    private String _simpleWrapped(String name, String value) {
+        return "<w>\n"
+                +"<"+name+">"+value+"</"+name+">\n"
+                +"</w>\n";
+    }
+}


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/deser/UntypedObjectDeserTest.java
=====================================
@@ -1,5 +1,9 @@
 package com.fasterxml.jackson.dataformat.xml.deser;
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectWriter;
@@ -81,4 +85,25 @@ public class UntypedObjectDeserTest extends XmlTestBase
             fail("Expected:\n"+w.writeValueAsString(exp)+"\ngot:\n"+w.writeValueAsString(fromXml));
         }
     }
+
+    // [dataformat-xml#445]: problem with earlier #205 implementation (from 2.12.0),
+    // fixed in 2.12.2
+    public void testDuplicateListDeser445() throws Exception
+    {
+        final String XML =
+                "<person>\n" +
+                        "    <name>a</name>\n" +
+                        "    <name>b</name>\n" +
+                        "    <surname>c</surname>\n" +
+                        "    <surname>d</surname>\n" +
+                        "</person>";
+        @SuppressWarnings("unchecked")
+        Map<String, List<String>> person = (Map<String, List<String>>) XML_MAPPER.readValue(XML, Object.class);
+        List<String> names = person.get("name");
+        List<String> surnames = person.get("surname");
+        assertEquals(2, names.size());
+        assertEquals(Arrays.asList("a", "b"), names);
+        assertEquals(2, surnames.size());
+        assertEquals(Arrays.asList("c", "d"), surnames);
+    }
 }


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/failing/JsonNodeBasicSer441Test.java
=====================================
@@ -8,7 +8,7 @@ import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
 // for [dataformat-xml#441]
 public class JsonNodeBasicSer441Test extends XmlTestBase
 {
-    final private ObjectMapper XML_MAPPER = newMapper();
+    private final ObjectMapper XML_MAPPER = newMapper();
 
     public void testSimpleNode() throws Exception
     {


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/failing/XmlParserErrorHandling463Test.java
=====================================
@@ -0,0 +1,27 @@
+package com.fasterxml.jackson.dataformat.xml.failing;
+
+import java.nio.charset.StandardCharsets;
+
+import com.fasterxml.jackson.core.exc.StreamReadException;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
+
+// [dataformat-xml#463]
+// (but root cause of https://github.com/FasterXML/woodstox/issues/123)
+public class XmlParserErrorHandling463Test extends XmlTestBase
+{
+    private final XmlMapper MAPPER = newMapper();
+
+    public void testInvalidXmlDecl() throws Exception
+    {
+        final byte[] doc = "<?xml version=\"1.1\" encoding=\"U\"?>".getBytes(StandardCharsets.UTF_8);
+        try {
+            MAPPER.readTree(doc);
+            fail("Should not pass");
+        } catch (StreamReadException e) {
+            verifyException(e, "Unsupported encoding: U");
+        } catch (RuntimeException e) {
+            fail("Should fail with specific `StreamReadException` but got: "+e);
+        }
+    }
+}


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/failing/XsiNilEnableDisable467Test.java
=====================================
@@ -0,0 +1,23 @@
+package com.fasterxml.jackson.dataformat.xml.failing;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
+
+public class XsiNilEnableDisable467Test extends XmlTestBase
+{
+    private final static String XSI_NS_DECL = "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'";
+
+    private final XmlMapper MAPPER = newMapper();
+
+    // [databind#467] / [databind#467]: xsi:nil handling of nested elements etc
+    public void testNilAsNodeLeaf() throws Exception
+    {
+        JsonNode node = MAPPER.readTree(
+"<e>"
++"<h xmlns:xsi='"+XSI_NS_DECL+"' xsi:nil='true'><child /></h>"
++"</e>"
+                );
+        assertNotNull(node);
+    }
+}


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/interop/NonWoodstoxStaxImpl482Test.java
=====================================
@@ -0,0 +1,49 @@
+package com.fasterxml.jackson.dataformat.xml.interop;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.ObjectReader;
+import com.fasterxml.jackson.dataformat.xml.XmlFactory;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
+import com.sun.xml.stream.ZephyrParserFactory;
+import com.sun.xml.stream.ZephyrWriterFactory;
+
+// to verify issue behind [dataformat-xml#482]
+public class NonWoodstoxStaxImpl482Test extends XmlTestBase
+{
+    static class Root {
+        public int value = 3;
+    }
+
+    private final XmlMapper SJSXP_MAPPER = XmlMapper.builder(
+            XmlFactory.builder()
+                .inputFactory(new ZephyrParserFactory())
+                .outputFactory(new ZephyrWriterFactory())
+            .build())
+            .build();
+ 
+    // [dataformat-xml#482]
+    public void testSjsxpFromByteArray() throws Exception
+    {
+        byte[] xml0 = SJSXP_MAPPER.writeValueAsBytes(new Root());
+        // and just for fun, ensure offset handling works:
+        byte[] xml = new byte[xml0.length + 10];
+        System.arraycopy(xml0, 0, xml, 5, xml0.length);
+        Root result = SJSXP_MAPPER.readValue(xml, 5, xml0.length, Root.class);
+        assertNotNull(result);
+    }
+
+    // [dataformat-xml#482]
+    public void testSjsxpFromCharArray() throws Exception
+    {
+        char[] xml0 = SJSXP_MAPPER.writeValueAsString(new Root()).toCharArray();
+        // add offset
+        char[] xml = new char[xml0.length + 10];
+        System.arraycopy(xml0, 0, xml, 5, xml0.length);
+        ObjectReader r = SJSXP_MAPPER.readerFor(Root.class);
+        JsonParser p = r.createParser(xml, 5, xml0.length);
+        Root result =  r.readValue(p);
+        p.close();
+        assertNotNull(result);
+    }
+}


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/lists/EmptyListDeserTest.java
=====================================
@@ -38,14 +38,27 @@ public class EmptyListDeserTest extends XmlTestBase
     static class Value319 {
         public Long orderId, orderTypeId;
     }    
-    
+
+    // [dataformat-xml#460]
+    static class Channel460 {
+        public String channelId;
+    }
+
+    static class ChannelSet460 {
+        public String setId;
+
+        // is default but just for readability
+        @JacksonXmlElementWrapper(useWrapping = true)
+        public List<Channel460> channels;
+    }
+
     /*
     /**********************************************************
     /* Test methods
     /**********************************************************
      */
 
-    private final XmlMapper MAPPER = new XmlMapper();
+    private final XmlMapper MAPPER = newMapper();
 
     // [dataformat-xml#124]
     public  void test124() throws Exception {
@@ -101,4 +114,17 @@ public class EmptyListDeserTest extends XmlTestBase
         });
         assertNull(result);
     }
+
+    // [dataformat-xml#460]
+    public void testWrappedEmptyListWithWhitespace458() throws Exception
+    {
+        String input = "<ChannelSet460>\n" +
+                "<setId>2</setId>\n" +
+                "<channels>\n" +
+                "</channels>\n" +
+                "</ChannelSet460>";
+        ChannelSet460 set = MAPPER.readValue(input, ChannelSet460.class);
+        assertEquals("List should be empty", 0,
+                set.channels.size());
+    }
 }


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/lists/ListDeser469Test.java
=====================================
@@ -0,0 +1,139 @@
+package com.fasterxml.jackson.dataformat.xml.lists;
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.dataformat.xml.JacksonXmlAnnotationIntrospector;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+
+// Trying to reproduce [dataformat-xml#469]
+public class ListDeser469Test extends XmlTestBase
+{
+    static class OuterBean {
+        @JacksonXmlProperty(localName = "Middle", namespace = "http://jackson.test.model")
+        public MiddleBean middle;
+    }
+
+    @JsonPropertyOrder({"inner1", "inner2"})
+    static class MiddleBean
+    {
+        @JacksonXmlProperty(localName = "Inner1", namespace = "http://jackson.test.model")
+        public InnerBean1 inner1;
+
+        @JacksonXmlElementWrapper(useWrapping = false)
+        @JacksonXmlProperty(localName = "Inner2", namespace = "http://jackson.test.model")
+        public List<InnerBean2> inner2;
+    }
+
+    static class InnerBean1
+    {
+        @JacksonXmlProperty(localName = "Str", isAttribute = true)
+        public String str;
+
+        @JacksonXmlProperty(localName = "InnerBean1Item", namespace = "http://jackson.test.model")
+        public List<InnerBean1Item> item;
+    }
+
+    static class InnerBean1Item
+    {
+        @JacksonXmlProperty(localName = "Id", isAttribute = true)
+        public String id;
+    }
+
+    static class InnerBean2
+    {
+        @JacksonXmlProperty(localName = "Str2", isAttribute = true)
+        public String str2;
+
+        protected InnerBean2() { }
+        public InnerBean2(String s) { str2 = s; }
+    }
+
+    // also wrt [dataformat-xml#469]
+    static class OuterNoWrappers {
+        public List<InnerNoWrappers> inner;
+    }
+
+    static class InnerNoWrappers {
+        @JacksonXmlProperty(isAttribute = true)
+        public String str;
+
+        protected InnerNoWrappers() { }
+        public InnerNoWrappers(String s) { str = s; }
+    }
+
+    /*
+    /**********************************************************************
+    /* Test methods
+    /**********************************************************************
+     */
+
+    public void testIssue469WithDefaults() throws Exception
+    {
+        // Here we just use default settings (which defaults to using wrappers)
+        final XmlMapper mapper = newMapper();
+
+        // First: create POJO value to test round-trip:
+        {
+            OuterBean source = new OuterBean();
+            source.middle = new MiddleBean();
+            List<InnerBean2> items = new ArrayList<>();
+            items.add(new InnerBean2("foo"));
+            source.middle.inner2 = items;
+
+            String xml = mapper.writerWithDefaultPrettyPrinter()
+                    .writeValueAsString(source);
+
+            OuterBean result = mapper.readValue(xml, OuterBean.class);
+
+            MiddleBean mid = result.middle;
+            assertNotNull(mid);
+            assertNotNull(mid.inner2);
+            assertEquals(1, mid.inner2.size());
+            assertEquals("foo", mid.inner2.get(0).str2);
+        }
+
+        // And then verify from XML String
+        String xmlInput = "<OuterBean xmlns='http://jackson.test.model'>\n" +
+            "  <Middle>\n" +
+            "    <Inner1/>\n" +
+            "    <Inner2 Str2='aaaa'/>\n" +
+            "  </Middle>\n" +
+            "</OuterBean>\n";
+
+        OuterBean outer = mapper.readValue(xmlInput, OuterBean.class);
+
+        MiddleBean mid = outer.middle;
+        assertNotNull(mid);
+
+        assertNotNull(mid.inner2);
+        assertEquals(1, mid.inner2.size());
+        assertEquals("aaaa", mid.inner2.get(0).str2);
+    }
+
+    // But alternatively can try setting default to "no wrappers":
+    public void testIssue469WithNoWrapper() throws Exception
+    {
+        final XmlMapper mapper = XmlMapper.builder()
+                .annotationIntrospector(new JacksonXmlAnnotationIntrospector(false))
+                .build();
+
+        // First: check round-trip
+        {
+            OuterNoWrappers source = new OuterNoWrappers();
+            source.inner = new ArrayList<>();
+            source.inner.add(new InnerNoWrappers("value"));
+
+            String xml = mapper.writerWithDefaultPrettyPrinter()
+                    .writeValueAsString(source);
+//System.err.println("XML:\n"+xml);
+            OuterNoWrappers result = mapper.readValue(xml, OuterNoWrappers.class);
+            assertNotNull(result.inner);
+            assertEquals(1, result.inner.size());
+            assertEquals("value",result.inner.get(0).str);
+        }
+    }
+}


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/lists/ListDeserializationTest.java
=====================================
@@ -3,6 +3,7 @@ package com.fasterxml.jackson.dataformat.xml.lists;
 import java.math.BigDecimal;
 import java.util.*;
 
+import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.annotation.JsonRootName;
@@ -15,12 +16,6 @@ import com.fasterxml.jackson.dataformat.xml.annotation.*;
 
 public class ListDeserializationTest extends XmlTestBase
 {
-    /*
-    /**********************************************************
-    /* Helper types
-    /**********************************************************
-     */
-
     @JsonRootName(value = "person", namespace ="http://example.org/person" )
     public static class Person
     {
@@ -72,6 +67,7 @@ public class ListDeserializationTest extends XmlTestBase
     static class ListBeanUnwrapped
     {
         @JacksonXmlElementWrapper(useWrapping=false)
+        @JsonAlias("aliasValue")
         public List<Integer> values;
     }
 
@@ -296,6 +292,19 @@ System.out.println("List -> "+MAPPER.writeValueAsString(foo));
         assertEquals(Integer.valueOf(3), bean.values.get(2));
     }
 
+    public void testUnwrappedAliasListBeanDeser() throws Exception
+    {
+        ListBeanUnwrapped bean = MAPPER.readValue(
+                "<ListBeanUnwrapped><aliasValue>1</aliasValue><aliasValue>2</aliasValue><aliasValue>3</aliasValue></ListBeanUnwrapped>",
+                ListBeanUnwrapped.class);
+        assertNotNull(bean);
+        assertNotNull(bean.values);
+        assertEquals(3, bean.values.size());
+        assertEquals(Integer.valueOf(1), bean.values.get(0));
+        assertEquals(Integer.valueOf(2), bean.values.get(1));
+        assertEquals(Integer.valueOf(3), bean.values.get(2));
+    }
+
     // [dataformat-xml#191]
     public void testListDeser191() throws Exception
     {


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/lists/ListSerializationTest.java
=====================================
@@ -6,6 +6,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.JacksonXmlAnnotationIntrospector;
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
@@ -81,6 +82,17 @@ public class ListSerializationTest extends XmlTestBase
         String xml = MAPPER.writeValueAsString(new ListBean(1, 2, 3));
         xml = removeSjsxpNamespace(xml);
         assertEquals("<ListBean><values><values>1</values><values>2</values><values>3</values></values></ListBean>", xml);
+
+        // for [dataformat-xml#469] try forcing wrapping:
+        XmlMapper unwrapMapper = XmlMapper.builder()
+                .annotationIntrospector(new JacksonXmlAnnotationIntrospector(false))
+                .build();
+        xml = unwrapMapper.writeValueAsString(new ListBean(1, 2, 3));
+        xml = removeSjsxpNamespace(xml);
+        assertEquals("<ListBean>"
+                +"<values>1</values><values>2</values><values>3</values>"
+                +"</ListBean>",
+                xml);
     }
 
     public void testStringList() throws IOException


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/lists/ListWithAttributesDeserTest.java
=====================================
@@ -151,7 +151,7 @@ public class ListWithAttributesDeserTest extends XmlTestBase
                 + "</Root>";
         ObjectReader r = MAPPER.readerFor(Root.class)
                 .without(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
-        Root root = r.readValue(source, Root.class);
+        Root root = r.readValue(source);
         assertNotNull(root.values);
         assertEquals(1, root.values.size());
     }


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/lists/UnwrappedListsTest.java
=====================================
@@ -56,7 +56,7 @@ public class UnwrappedListsTest extends XmlTestBase
     
     /*
     /**********************************************************************
-    /* Unit tests
+    /* Test methods
     /**********************************************************************
      */
 


=====================================
src/test/java/com/fasterxml/jackson/dataformat/xml/misc/PolymorphicTypesTest.java
=====================================
@@ -3,9 +3,13 @@ package com.fasterxml.jackson.dataformat.xml.misc;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
 
@@ -47,30 +51,35 @@ public class PolymorphicTypesTest extends XmlTestBase
         public Wrapper(List<TypeWithClassPropertyAndObjectId> data) { this.data = data; }
     }
 
-    /*
-    /**********************************************************
-    /* Set up
-    /**********************************************************
-     */
+    // [dataformat-xml#451]
+    @JsonTypeInfo(use = JsonTypeInfo.Id.DEDUCTION)
+    @JsonSubTypes(@JsonSubTypes.Type(Child451.class))
+    public interface Value451 {}
 
-    protected XmlMapper _xmlMapper;
+    public static class Child451 implements Value451 {
+        private final String property1;
 
-    // let's actually reuse XmlMapper to make things bit faster
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        _xmlMapper = new XmlMapper();
-    }
+        @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
+        public Child451(@JsonProperty("property1") String property1) {
+            this.property1 = property1;
+        }
+
+        public String getProperty1() {
+            return property1;
+        }
+    }    
 
     /*
-    /**********************************************************
-    /* Unit tests
-    /**********************************************************
+    /**********************************************************************
+    /* Test methods
+    /**********************************************************************
      */
 
+    private final XmlMapper MAPPER = newMapper();
+
     public void testAsClassProperty() throws Exception
     {
-        String xml = _xmlMapper.writeValueAsString(new SubTypeWithClassProperty("Foobar"));
+        String xml = MAPPER.writeValueAsString(new SubTypeWithClassProperty("Foobar"));
 
         // Type info should be written as an attribute, so:
         final String exp = 
@@ -80,7 +89,7 @@ public class PolymorphicTypesTest extends XmlTestBase
                 ;
         assertEquals(exp, xml);
         
-        Object result = _xmlMapper.readValue(xml, BaseTypeWithClassProperty.class);
+        Object result = MAPPER.readValue(xml, BaseTypeWithClassProperty.class);
         assertNotNull(result);
         assertEquals(SubTypeWithClassProperty.class, result.getClass());
         assertEquals("Foobar", ((SubTypeWithClassProperty) result).name);
@@ -88,16 +97,14 @@ public class PolymorphicTypesTest extends XmlTestBase
         
     public void testAsClassObject() throws Exception
     {
-        String xml = _xmlMapper.writeValueAsString(new SubTypeWithClassObject("Foobar"));
-        Object result = _xmlMapper.readValue(xml, BaseTypeWithClassObject.class);
+        String xml = MAPPER.writeValueAsString(new SubTypeWithClassObject("Foobar"));
+        Object result = MAPPER.readValue(xml, BaseTypeWithClassObject.class);
         assertNotNull(result);
         assertEquals(SubTypeWithClassObject.class, result.getClass());
         assertEquals("Foobar", ((SubTypeWithClassObject) result).name);
     }
 
-    /**
-     * Test for [dataformat-xml#81]
-     */
+    // Test for [dataformat-xml#81]
     public void testAsPropertyWithObjectId() throws Exception
     {
         List<TypeWithClassPropertyAndObjectId> data = new ArrayList<PolymorphicTypesTest.TypeWithClassPropertyAndObjectId>();
@@ -105,11 +112,23 @@ public class PolymorphicTypesTest extends XmlTestBase
         data.add(object);
         // This will be written as an id reference instead of object; as such, no type info will be written.
         data.add(object);
-        String xml = _xmlMapper.writeValueAsString(new Wrapper(data));
-        Wrapper result = _xmlMapper.readValue(xml, Wrapper.class);
+        String xml = MAPPER.writeValueAsString(new Wrapper(data));
+        Wrapper result = MAPPER.readValue(xml, Wrapper.class);
         assertNotNull(result);
         assertSame(result.data.get(0), result.data.get(1));
         assertEquals("Foobar", result.data.get(0).id);
     }
+
+    // Test for [dataformat-xml#451]
+    public void testDeduction() throws Exception
+    {
+        String xml = MAPPER.writeValueAsString(new Child451("value1"));
+        assertTrue(xml.contains("<property1>value1</property1>"));
+
+        // and try reading back for funsies
+        Value451 result = MAPPER.readValue(xml, Value451.class);
+        assertNotNull(result);
+        assertEquals(Child451.class, result.getClass());
+    }
 }
    
\ No newline at end of file



View it on GitLab: https://salsa.debian.org/java-team/jackson-dataformat-xml/-/compare/847aa3d8e22c2f7a7793e098626a2cff11558a6a...743de2b0e6a35e349c0ca587b54bd979eca600a7

-- 
View it on GitLab: https://salsa.debian.org/java-team/jackson-dataformat-xml/-/compare/847aa3d8e22c2f7a7793e098626a2cff11558a6a...743de2b0e6a35e349c0ca587b54bd979eca600a7
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20210907/3e6d4a1c/attachment.htm>


More information about the pkg-java-commits mailing list