From ad583137c9ca374a3b36779ab5ef45cd4568fa6c Mon Sep 17 00:00:00 2001 From: Simon Cockx Date: Mon, 24 Jun 2024 10:28:15 +0200 Subject: [PATCH 1/2] Add regression test --- .../dataformat/xml/JacksonXmlModule.java | 1 + .../jackson/dataformat/xml/XmlFactory.java | 1 + .../jackson/dataformat/xml/XmlMapper.java | 1 + .../dataformat/xml/deser/FromXmlParser.java | 2 +- ...omAnnotationIntrospectorNoWrapperTest.java | 70 +++++++++++++++++++ .../dataformat/xml/VersionInfoTest.java | 1 + 6 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/fasterxml/jackson/dataformat/xml/CustomAnnotationIntrospectorNoWrapperTest.java diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/JacksonXmlModule.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/JacksonXmlModule.java index c9a57c1d2..3a8b68a73 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/JacksonXmlModule.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/JacksonXmlModule.java @@ -1,5 +1,6 @@ package com.fasterxml.jackson.dataformat.xml; +import com.fasterxml.jackson.core.json.PackageVersion; import com.fasterxml.jackson.databind.AnnotationIntrospector; import com.fasterxml.jackson.databind.module.SimpleModule; 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 521c9bded..48a9304cf 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactory.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactory.java @@ -4,6 +4,7 @@ import javax.xml.stream.*; +import com.fasterxml.jackson.core.json.PackageVersion; import org.codehaus.stax2.XMLInputFactory2; import org.codehaus.stax2.io.Stax2ByteArraySource; import org.codehaus.stax2.io.Stax2CharArraySource; 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 0fc5c1e91..be79caf1d 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlMapper.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlMapper.java @@ -8,6 +8,7 @@ import javax.xml.stream.XMLStreamWriter; import com.fasterxml.jackson.core.*; +import com.fasterxml.jackson.core.json.PackageVersion; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.cfg.CoercionAction; diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java index 654aafbe3..5509294fd 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java @@ -18,10 +18,10 @@ import com.fasterxml.jackson.core.exc.StreamConstraintsException; import com.fasterxml.jackson.core.io.IOContext; import com.fasterxml.jackson.core.io.NumberInput; +import com.fasterxml.jackson.core.json.PackageVersion; import com.fasterxml.jackson.core.util.ByteArrayBuilder; import com.fasterxml.jackson.core.util.JacksonFeatureSet; -import com.fasterxml.jackson.dataformat.xml.PackageVersion; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlNameProcessor; import com.fasterxml.jackson.dataformat.xml.util.CaseInsensitiveNameSet; diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/CustomAnnotationIntrospectorNoWrapperTest.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/CustomAnnotationIntrospectorNoWrapperTest.java new file mode 100644 index 000000000..f27aa3573 --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/CustomAnnotationIntrospectorNoWrapperTest.java @@ -0,0 +1,70 @@ +package com.fasterxml.jackson.dataformat.xml; + +import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.databind.AnnotationIntrospector; +import com.fasterxml.jackson.databind.PropertyName; +import com.fasterxml.jackson.databind.introspect.Annotated; +import com.fasterxml.jackson.databind.module.SimpleModule; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.Arrays; +import java.util.List; + +/** + * A regression test for https://github.com/FasterXML/jackson-databind/issues/4595 + */ +public class CustomAnnotationIntrospectorNoWrapperTest extends XmlTestBase { + private final XmlMapper MAPPER = newMapper(); + + public void testNoWrapper() throws Exception { + Foo foo = new Foo(Arrays.asList("Value1", "Value2")); + + assertEquals("Value1Value2", MAPPER.writeValueAsString(foo)); + + MAPPER + .registerModule(new SimpleModule("NoWrapperModule") { + @Override + public void setupModule(SetupContext context) { + context.insertAnnotationIntrospector(new NoWrapperIntrospector()); + super.setupModule(context); + } + }); + + // TODO: update after fixing https://github.com/FasterXML/jackson-databind/issues/4595 + // Should be assertEquals("Value1Value2", MAPPER.writeValueAsString(foo)); + assertEquals("Value1Value2", MAPPER.writeValueAsString(foo)); + } + + public static class Foo { + private final List bar; + + public Foo(List bar) { + this.bar = bar; + } + + @NoWrapper + public List getBar() { + return bar; + } + } + + public static class NoWrapperIntrospector extends AnnotationIntrospector { + @Override + public Version version() { + return com.fasterxml.jackson.databind.cfg.PackageVersion.VERSION; + } + + @Override + public PropertyName findWrapperName(Annotated ann) { + if (ann.hasAnnotation(NoWrapper.class)) { + return PropertyName.NO_NAME; + } + return super.findWrapperName(ann); + } + } + + @Retention(RetentionPolicy.RUNTIME) + public @interface NoWrapper { + } +} diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/VersionInfoTest.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/VersionInfoTest.java index 3dca6dd6d..21e3a44ee 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/VersionInfoTest.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/VersionInfoTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.core.Versioned; +import com.fasterxml.jackson.core.json.PackageVersion; public class VersionInfoTest extends XmlTestBase { From 91581fee86fc1f0da7a9e4e88ff8665aceb7dcf9 Mon Sep 17 00:00:00 2001 From: Simon Cockx Date: Mon, 24 Jun 2024 11:53:49 +0200 Subject: [PATCH 2/2] Revert imports --- .../com/fasterxml/jackson/dataformat/xml/JacksonXmlModule.java | 1 - .../java/com/fasterxml/jackson/dataformat/xml/XmlFactory.java | 1 - .../java/com/fasterxml/jackson/dataformat/xml/XmlMapper.java | 1 - .../fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java | 2 +- .../com/fasterxml/jackson/dataformat/xml/VersionInfoTest.java | 1 - 5 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/JacksonXmlModule.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/JacksonXmlModule.java index 3a8b68a73..c9a57c1d2 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/JacksonXmlModule.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/JacksonXmlModule.java @@ -1,6 +1,5 @@ package com.fasterxml.jackson.dataformat.xml; -import com.fasterxml.jackson.core.json.PackageVersion; import com.fasterxml.jackson.databind.AnnotationIntrospector; import com.fasterxml.jackson.databind.module.SimpleModule; 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 48a9304cf..521c9bded 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactory.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlFactory.java @@ -4,7 +4,6 @@ import javax.xml.stream.*; -import com.fasterxml.jackson.core.json.PackageVersion; import org.codehaus.stax2.XMLInputFactory2; import org.codehaus.stax2.io.Stax2ByteArraySource; import org.codehaus.stax2.io.Stax2CharArraySource; 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 be79caf1d..0fc5c1e91 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlMapper.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/XmlMapper.java @@ -8,7 +8,6 @@ import javax.xml.stream.XMLStreamWriter; import com.fasterxml.jackson.core.*; -import com.fasterxml.jackson.core.json.PackageVersion; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.cfg.CoercionAction; diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java index 5509294fd..654aafbe3 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java @@ -18,10 +18,10 @@ import com.fasterxml.jackson.core.exc.StreamConstraintsException; import com.fasterxml.jackson.core.io.IOContext; import com.fasterxml.jackson.core.io.NumberInput; -import com.fasterxml.jackson.core.json.PackageVersion; import com.fasterxml.jackson.core.util.ByteArrayBuilder; import com.fasterxml.jackson.core.util.JacksonFeatureSet; +import com.fasterxml.jackson.dataformat.xml.PackageVersion; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlNameProcessor; import com.fasterxml.jackson.dataformat.xml.util.CaseInsensitiveNameSet; diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/VersionInfoTest.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/VersionInfoTest.java index 21e3a44ee..3dca6dd6d 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/VersionInfoTest.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/VersionInfoTest.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.core.Versioned; -import com.fasterxml.jackson.core.json.PackageVersion; public class VersionInfoTest extends XmlTestBase {