[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