diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactory.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactory.java index 33521d093..2463e6912 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactory.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactory.java @@ -165,7 +165,7 @@ protected XmlFactory(XmlFactoryBuilder b) _cfgNameForTextElement = b.nameForTextElement(); _xmlInputFactory = b.xmlInputFactory(); _xmlOutputFactory = b.xmlOutputFactory(); - _nameProcessor = b.xmlTagProcessor(); + _nameProcessor = b.xmlNameProcessor(); _initFactories(_xmlInputFactory, _xmlOutputFactory); } @@ -336,11 +336,11 @@ public int getFormatGeneratorFeatures() { return _xmlGeneratorFeatures; } - public XmlNameProcessor getXmlTagProcessor() { + public XmlNameProcessor getXmlNameProcessor() { return _nameProcessor; } - public void setXmlTagProcessor(XmlNameProcessor processor) { + public void setXmlNameProcessor(XmlNameProcessor processor) { _nameProcessor = processor; } diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactoryBuilder.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactoryBuilder.java index c6ed91664..96512eaa8 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactoryBuilder.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactoryBuilder.java @@ -142,7 +142,7 @@ protected ClassLoader staxClassLoader() { getClass().getClassLoader() : _classLoaderForStax; } - public XmlNameProcessor xmlTagProcessor() { + public XmlNameProcessor xmlNameProcessor() { return _nameProcessor; } @@ -270,7 +270,7 @@ public XmlFactoryBuilder staxClassLoader(ClassLoader cl) { /** * @since 2.14 */ - public XmlFactoryBuilder xmlTagProcessor(XmlNameProcessor nameProcessor) { + public XmlFactoryBuilder xmlNameProcessor(XmlNameProcessor nameProcessor) { _nameProcessor = nameProcessor; return _this(); } diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlMapper.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlMapper.java index f1c904eba..09d2c4d97 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlMapper.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlMapper.java @@ -292,7 +292,7 @@ public XmlMapper setDefaultUseWrapper(boolean state) { * @since 2.14 */ public void setXmlNameProcessor(XmlNameProcessor processor) { - ((XmlFactory)_jsonFactory).setXmlTagProcessor(processor); + ((XmlFactory)_jsonFactory).setXmlNameProcessor(processor); } /* diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlNameProcessors.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlNameProcessors.java index f860094f7..91a0547cd 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlNameProcessors.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlNameProcessors.java @@ -40,7 +40,7 @@ private XmlNameProcessors() { * @since 2.14 */ public static XmlNameProcessor newPassthroughProcessor() { - return new PassthroughTagProcessor(); + return new PassthroughProcessor(); } /** @@ -157,10 +157,10 @@ public static XmlNameProcessor newAlwaysOnBase64Processor() { return new AlwaysOnBase64NameProcessor(); } - static class PassthroughTagProcessor implements XmlNameProcessor { + static class PassthroughProcessor implements XmlNameProcessor { private static final long serialVersionUID = 1L; - public PassthroughTagProcessor() { } + public PassthroughProcessor() { } @Override public void encodeName(XmlName name) { } diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/creator/NoArgCtorDeser491Test.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/creator/NoArgCtorDeser491Test.java index 8ea9f0712..bcc1d0ff2 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/creator/NoArgCtorDeser491Test.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/creator/NoArgCtorDeser491Test.java @@ -18,16 +18,11 @@ * token (for consistency with how XML is mapper to tokens); this leads to deserialization * attempting to use "empty Object" construction which expects availability of the * default constructor. - * To resolve the issue there are at least two possible ways: - * - * Either approach could work, although former could cause other kinds of regression. + *

+ * Jackson 2.14 solved this issue by reverting earlier changes so that empty element + * is exposed as simple START_OBJECT/END_OBJECT sequence (that is, empty Object). + * Use cases where (non-empty) element needs to map to Scalar types is now handled + * with mechanism introduced in 2.13. */ public class NoArgCtorDeser491Test extends XmlTestBase { @@ -101,12 +96,16 @@ public void test_empty_Problem_JSON_deserialization() throws Exception public void test_empty_Problem_XML_deserialization() throws Exception { Problem problem = XML_MAPPER.readValue( - // This WOULD work: -// "500", - // but not missing "", Problem.class); assertEquals(Problem.DEFAULT_TYPE, problem.getType()); assertEquals(Problem.DEFAULT_STATUS, problem.getStatus()); + + // Also ensure variations of empty do not vary + problem = XML_MAPPER.readValue( + "\n", + Problem.class); + assertEquals(Problem.DEFAULT_TYPE, problem.getType()); + assertEquals(Problem.DEFAULT_STATUS, problem.getStatus()); } }