Skip to content

Commits on Source 11

......@@ -3,8 +3,9 @@ language: java
jdk:
- openjdk7
- openjdk8
- oraclejdk9
branches:
only:
- master
- "2.8"
- "2.9"
jackson-dataformat-xml (2.9.6-1) unstable; urgency=medium
* New upstream version 2.9.6.
* Add jackson-base-version.patch and use the current version of jackson-base.
Unfortunately it is not possible to override a parent pom tag with
maven.rules.
* Build-depend on libjaxb-api-java.
* Add javadoc-classpath.patch and add the missing jaxb-api.jar to the Javadoc
classpath. (Closes: #906368)
* Fix dh_installchangelogs override. Changelog is called Version-2.x now.
* Declare compliance with Debian Policy 4.2.0.
-- Markus Koschany <apo@debian.org> Fri, 17 Aug 2018 22:16:58 +0200
jackson-dataformat-xml (2.9.4-1) unstable; urgency=medium
* New upstream version 2.9.4.
......
......@@ -16,6 +16,7 @@ Build-Depends:
libjackson2-databind-java,
libjackson2-databind-java-doc,
libjackson2-module-jaxb-annotations-java,
libjaxb-api-java,
libmaven-bundle-plugin-java,
libmaven-enforcer-plugin-java,
libmaven-javadoc-plugin-java,
......@@ -24,7 +25,7 @@ Build-Depends:
libstax2-api-java (>= 3.1.1),
maven-debian-helper (>= 1.5),
xmlstarlet
Standards-Version: 4.1.3
Standards-Version: 4.2.0
Vcs-Git: https://anonscm.debian.org/git/pkg-java/jackson-dataformat-xml.git
Vcs-Browser: https://anonscm.debian.org/cgit/pkg-java/jackson-dataformat-xml.git
Homepage: http://wiki.fasterxml.com/JacksonExtensionXmlDataBinding
......
From: Markus Koschany <apo@debian.org>
Date: Fri, 17 Aug 2018 21:31:33 +0200
Subject: jackson-base version
Use the debian version.
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index c7ee5c5..902d87c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>com.fasterxml.jackson</groupId>
<artifactId>jackson-base</artifactId>
- <version>2.9.6</version>
+ <version>debian</version>
</parent>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
From: Markus Koschany <apo@debian.org>
Date: Fri, 17 Aug 2018 22:07:34 +0200
Subject: javadoc classpath
Add jaxb-api.jar to the Javadoc classpath, otherwise javadoc will fail.
Bug-Debian: https://bugs.debian.org/906368
---
pom.xml | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/pom.xml b/pom.xml
index 902d87c..fca8726 100644
--- a/pom.xml
+++ b/pom.xml
@@ -116,6 +116,20 @@ Some data-binding types overridden as well (ObjectMapper sub-classed as XmlMappe
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>3.0.1</version>
+ <configuration>
+ <additionalDependencies>
+ <additionalDependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ <version>2.3.0</version>
+ </additionalDependency>
+ </additionalDependencies>
+ </configuration>
+ </plugin>
<!-- Need to skip known-failing tests for build... -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
jackson-base-version.patch
javadoc-classpath.patch
......@@ -4,7 +4,7 @@
dh $@
override_dh_installchangelogs:
dh_installchangelogs release-notes/VERSION
dh_installchangelogs release-notes/VERSION-2.x
get-orig-source:
uscan --download-current-version --force-download --repack --compression xz
......@@ -4,11 +4,11 @@
<parent>
<groupId>com.fasterxml.jackson</groupId>
<artifactId>jackson-base</artifactId>
<version>2.9.4</version>
<version>2.9.6</version>
</parent>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.4</version>
<version>2.9.6</version>
<name>Jackson-dataformat-XML</name>
<packaging>bundle</packaging>
<description>Data format extension for Jackson (http://jackson.codehaus.org) to offer
......@@ -21,7 +21,7 @@ Some data-binding types overridden as well (ObjectMapper sub-classed as XmlMappe
<connection>scm:git:git@github.com:FasterXML/jackson-dataformat-xml.git</connection>
<developerConnection>scm:git:git@github.com:FasterXML/jackson-dataformat-xml.git</developerConnection>
<url>http://github.com/FasterXML/jackson-dataformat-xml</url>
<tag>jackson-dataformat-xml-2.9.4</tag>
<tag>jackson-dataformat-xml-2.9.6</tag>
</scm>
<properties>
<packageVersion.dir>com/fasterxml/jackson/dataformat/xml</packageVersion.dir>
......@@ -85,6 +85,17 @@ Some data-binding types overridden as well (ObjectMapper sub-classed as XmlMappe
<version>5.0.3</version>
</dependency>
<!-- 04-Feb-2018, tatu: Finally, Java 9 does not bundle JAXB, not even API;
at least include it for tests. May need to include actual dep to
API for runtime too, but first for tests
-->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
......
......@@ -4,6 +4,11 @@ Project: jackson-dataformat-xml
= Releases
------------------------------------------------------------------------
2.9.6 (12-Jun-2018)
2.9.5 (26-Mar-2018)
No changes since 2.9.4
2.9.4 (24-Jan-2018)
- Changed the handling of String deserialization (with addition of `XmlStringDeserializer`)
......
......@@ -235,9 +235,8 @@ public class XmlMapper extends ObjectMapper
@SuppressWarnings("resource")
ToXmlGenerator g = getFactory().createGenerator(w0);
super.writeValue(g, value);
/* NOTE: above call should do flush(); and we should NOT close here.
* Finally, 'g' has no buffers to release.
*/
// NOTE: above call should do flush(); and we should NOT close here.
// Finally, 'g' has no buffers to release.
}
/*
......
......@@ -381,9 +381,24 @@ public class XmlTokenStream
while (true) {
switch (_xmlReader.next()) {
case XMLStreamConstants.START_ELEMENT:
return (text == null) ? "" : text;
case XMLStreamConstants.END_ELEMENT:
case XMLStreamConstants.END_DOCUMENT:
// 04-May-2018, tatu: We could easily make <tag></tag> ALSO report
// as `null`, by below, but that breaks existing tests so not
// done at least until 3.0.
/*
if (text == null) {
if (FromXmlParser.Feature.EMPTY_ELEMENT_AS_NULL.enabledIn(_formatFeatures)) {
return null;
}
return "";
}
return text;
*/
return (text == null) ? "" : text;
// note: SPACE is ignorable (and seldom seen), not to be included
case XMLStreamConstants.CHARACTERS:
case XMLStreamConstants.CDATA:
......
......@@ -54,7 +54,9 @@ public class XmlSerializerProvider extends DefaultSerializerProvider
*/
protected XmlSerializerProvider(XmlSerializerProvider src) {
super(src);
_rootNameLookup = src._rootNameLookup;
// 21-May-2018, tatu: As per [dataformat-xml#282], should NOT really copy
// root name lookup as that may link back to diff version, configuration
_rootNameLookup = new XmlRootNameLookup();
}
/*
......
package com.fasterxml.jackson.dataformat.xml;
import java.io.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider;
import com.fasterxml.jackson.dataformat.xml.util.XmlRootNameLookup;
public class MapperCopyTest extends XmlTestBase
{
@JacksonXmlRootElement(localName = "AnnotatedName")
static class Pojo282
{
public int a = 3;
}
public void testMapperCopy()
{
XmlMapper mapper1 = new XmlMapper();
mapper1.setXMLTextElementName("foo");
mapper1.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
mapper1.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
XmlMapper mapper2 = mapper1.copy();
assertNotSame(mapper1, mapper2);
XmlFactory xf1 = mapper1.getFactory();
XmlFactory xf2 = mapper2.getFactory();
assertNotSame(xf1, xf2);
assertEquals(XmlFactory.class, xf2.getClass());
// and incomplete copy as well
assertEquals(xf1.getXMLTextElementName(), xf2.getXMLTextElementName());
assertEquals(xf1._xmlGeneratorFeatures, xf2._xmlGeneratorFeatures);
assertEquals(xf1._xmlParserFeatures, xf2._xmlParserFeatures);
SerializationConfig sc1 = mapper1.getSerializationConfig();
SerializationConfig sc2 = mapper2.getSerializationConfig();
assertNotSame(sc1, sc2);
assertEquals(
"serialization features did not get copied",
sc1.getSerializationFeatures(),
sc2.getSerializationFeatures()
);
}
public void testSerializerProviderCopy() {
DefaultSerializerProvider provider = new XmlSerializerProvider(new XmlRootNameLookup());
DefaultSerializerProvider copy = provider.copy();
assertNotSame(provider, copy);
}
public void testMapperSerialization() throws Exception
{
XmlMapper mapper1 = newMapper();
mapper1.setXMLTextElementName("foo");
assertEquals("foo", mapper1.getFactory().getXMLTextElementName());
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
ObjectOutputStream objectStream = new ObjectOutputStream(bytes);
objectStream.writeObject(mapper1);
objectStream.close();
ObjectInputStream input = new ObjectInputStream(new ByteArrayInputStream(bytes.toByteArray()));
XmlMapper mapper2 = (XmlMapper) input.readObject();
input.close();
assertEquals("foo", mapper2.getFactory().getXMLTextElementName());
}
// [dataformat-xml#282]
public void testCopyWith() throws Exception
{
XmlMapper xmlMapper = newMapper();
final ObjectMapper xmlMapperNoAnno = xmlMapper.copy()
.disable(MapperFeature.USE_ANNOTATIONS)
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
String xml1 = xmlMapper.writeValueAsString(new Pojo282());
String xml2 = xmlMapperNoAnno.writeValueAsString(new Pojo282());
if (!xml1.contains("AnnotatedName")) {
fail("Should use name 'AnnotatedName', xml = "+xml1);
}
if (!xml2.contains("Pojo282")
|| xml2.contains("AnnotatedName")) {
fail("Should NOT use name 'AnnotatedName' but 'Pojo282', xml = "+xml1);
}
}
}
package com.fasterxml.jackson.dataformat.xml;
import java.io.*;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.core.Versioned;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider;
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider;
import com.fasterxml.jackson.dataformat.xml.util.XmlRootNameLookup;
public class VersionInfoTest extends XmlTestBase
{
......@@ -19,63 +11,6 @@ public class VersionInfoTest extends XmlTestBase
assertVersion(new XmlFactory());
}
// @since 2.1
// [Issue#48]: ObjectMapper.copy()
public void testMapperCopy()
{
XmlMapper mapper1 = new XmlMapper();
mapper1.setXMLTextElementName("foo");
mapper1.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
mapper1.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
XmlMapper mapper2 = mapper1.copy();
assertNotSame(mapper1, mapper2);
XmlFactory xf1 = mapper1.getFactory();
XmlFactory xf2 = mapper2.getFactory();
assertNotSame(xf1, xf2);
assertEquals(XmlFactory.class, xf2.getClass());
// and [Issue#48] as well, incomplete copy...
assertEquals(xf1.getXMLTextElementName(), xf2.getXMLTextElementName());
assertEquals(xf1._xmlGeneratorFeatures, xf2._xmlGeneratorFeatures);
assertEquals(xf1._xmlParserFeatures, xf2._xmlParserFeatures);
// and [Issue#233]
SerializationConfig sc1 = mapper1.getSerializationConfig();
SerializationConfig sc2 = mapper2.getSerializationConfig();
assertNotSame(sc1, sc2);
assertEquals(
"serialization features did not get copied",
sc1.getSerializationFeatures(),
sc2.getSerializationFeatures()
);
}
public void testSerializerProviderCopy() {
DefaultSerializerProvider provider = new XmlSerializerProvider(new XmlRootNameLookup());
DefaultSerializerProvider copy = provider.copy();
assertNotSame(provider, copy);
}
// Another test for [Issue#48]
public void testMapperSerialization() throws Exception
{
XmlMapper mapper1 = new XmlMapper();
mapper1.setXMLTextElementName("foo");
assertEquals("foo", mapper1.getFactory().getXMLTextElementName());
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
ObjectOutputStream objectStream = new ObjectOutputStream(bytes);
objectStream.writeObject(mapper1);
objectStream.close();
ObjectInputStream input = new ObjectInputStream(new ByteArrayInputStream(bytes.toByteArray()));
XmlMapper mapper2 = (XmlMapper) input.readObject();
input.close();
assertEquals("foo", mapper2.getFactory().getXMLTextElementName());
}
/*
/**********************************************************
/* Helper methods
......
......@@ -6,8 +6,9 @@ import java.util.Arrays;
import junit.framework.TestCase;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
public abstract class XmlTestBase
......@@ -140,6 +141,31 @@ public abstract class XmlTestBase
}
}
// since 2.9.6
public static class Point {
public int x, y;
protected Point() { } // for deser
public Point(int x0, int y0) {
x = x0;
y = y0;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Point)) {
return false;
}
Point other = (Point) o;
return (other.x == x) && (other.y == y);
}
@Override
public String toString() {
return String.format("[x=%d, y=%d]", x, y);
}
}
/*
/**********************************************************
/* Some sample documents:
......@@ -183,7 +209,7 @@ public abstract class XmlTestBase
super();
}
protected static ObjectMapper newObjectMapper() {
protected static XmlMapper newMapper() {
return new XmlMapper();
}
......
......@@ -30,9 +30,9 @@ public class CaseInsensitiveDeserTest extends XmlTestBase
/********************************************************
*/
private final ObjectMapper MAPPER = newObjectMapper();
private final ObjectMapper MAPPER = newMapper();
private final ObjectMapper INSENSITIVE_MAPPER = newObjectMapper()
private final ObjectMapper INSENSITIVE_MAPPER = newMapper()
.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES);
public void testCaseInsensitive1036() throws Exception
......
package com.fasterxml.jackson.dataformat.xml.deser;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
// [dataformat-xml#274]: Actually passes... can not reproduce failure
public class Issue274PropertyNameTest extends XmlTestBase
{
private static final String XML =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<dataroot xmlns:od=\"urn:schemas-microsoft-com:officedata\" generated=\"2017-06-07T10:11:20\">\n" +
" <Event>\n" +
" <EventId>34906566143035</EventId>\n" +
" </Event>\n" +
"</dataroot>";
static class Event {
@JacksonXmlProperty(localName = "EventId")
private String EventId;
public String getEventId() {
return EventId;
}
public void setEventId(String eventId) {
this.EventId = eventId;
}
}
@JacksonXmlRootElement(localName = "dataroot")
static class RootObject {
@JacksonXmlProperty(localName = "Event")
Event event;
@JacksonXmlProperty(localName = "generated")
String generated;
}
/*
/********************************************************
/* Test methods
/********************************************************
*/
// [dataformat-xml#274]
public void testIssue274() throws Exception
{
final ObjectMapper xm = newMapper()
// serialization features
// xm.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
// xm.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT)
//this is for deserialization only and means we don't need to camelCase xml property names
.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES)
;
RootObject obj = xm.readValue(XML, RootObject.class);
assertNotNull(obj);
}
}
package com.fasterxml.jackson.dataformat.xml.deser;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.Nulls;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
// Copied from `com.fasterxml.jackson.databind.deser.filter.` in `jackson-databind`
public class NullConversionsGenericTest extends XmlTestBase
{
static class PointWrapper {
@JsonSetter(nulls=Nulls.AS_EMPTY)
public Point p;
}
static class GeneralEmpty<T> {
// 09-Feb-2017, tatu: Should only need annotation either for field OR setter, not both:
// @JsonSetter(nulls=Nulls.AS_EMPTY)
T value;
protected GeneralEmpty() { }
public GeneralEmpty(T v) { value = v; }
@JsonSetter(nulls=Nulls.AS_EMPTY)
public void setValue(T v) {
value = v;
}
public T getValue() { return value; }
}
static class NoCtorWrapper {
@JsonSetter(nulls=Nulls.AS_EMPTY)
public NoCtorPOJO value;
}
static class NoCtorPOJO {
public NoCtorPOJO(boolean b) { }
}
/*
/**********************************************************
/* Test methods
/**********************************************************
*/
private final XmlMapper MAPPER = newMapper();
private final static String EMPTY_XML = "<GeneralEmpty><value /></GeneralEmpty>";
public void testNullsToEmptyPojo() throws Exception
{
PointWrapper pw = MAPPER.readValue("<PointWrapper><p /></PointWrapper>",
PointWrapper.class);
assertNotNull(pw);
assertNotNull(pw.p);
assertEquals(0, pw.p.x);
assertEquals(0, pw.p.y);
}
public void testNullsToGenericPojo() throws Exception
{
String xml = MAPPER.writeValueAsString(new GeneralEmpty<Point>(new Point(1, 2)));
GeneralEmpty<Point> result = MAPPER.readValue(EMPTY_XML,
new TypeReference<GeneralEmpty<Point>>() { });
assertNotNull(result.value);
Point p = result.value;
assertEquals(0, p.x);
assertEquals(0, p.y);
// and then also failing case with no suitable creator:
try {
/* NoCtorWrapper nogo =*/ MAPPER.readValue(EMPTY_XML,
NoCtorWrapper.class);
fail("Should not pass");
} catch (JsonMappingException e) {
verifyException(e, "Cannot create empty instance");
}
}
// 04-May-2018, tatu: In theory could be supportable, but wrapping (or not)
// of Collections, other requirements, make it... not that easy.
/*
public void testNullsToEmptyCollection() throws Exception
{
GeneralEmpty<List<String>> result = MAPPER.readValue(EMPTY_XML,
new TypeReference<GeneralEmpty<List<String>>>() { });
assertNotNull(result.value);
assertEquals(0, result.value.size());
// but also non-String type, since impls vary
GeneralEmpty<List<Integer>> result2 = MAPPER.readValue(EMPTY_XML,
new TypeReference<GeneralEmpty<List<Integer>>>() { });
assertNotNull(result2.value);
assertEquals(0, result2.value.size());
}
*/
// 04-May-2018, tatu: Maps and XML do not mix well, alas:
/*
public void testNullsToEmptyMap() throws Exception
{
GeneralEmpty<Map<String,String>> result = MAPPER.readValue(EMPTY_XML,
new TypeReference<GeneralEmpty<Map<String,String>>>() { });
assertNotNull(result.value);
assertEquals(0, result.value.size());
}
*/
public void testNullsToEmptyArrays() throws Exception
{
final String doc = EMPTY_XML;
GeneralEmpty<Object[]> result = MAPPER.readValue(doc,
new TypeReference<GeneralEmpty<Object[]>>() { });
assertNotNull(result.value);
assertEquals(0, result.value.length);
GeneralEmpty<String[]> result2 = MAPPER.readValue(doc,
new TypeReference<GeneralEmpty<String[]>>() { });
assertNotNull(result2.value);
assertEquals(0, result2.value.length);
GeneralEmpty<int[]> result3 = MAPPER.readValue(doc,
new TypeReference<GeneralEmpty<int[]>>() { });
assertNotNull(result3.value);
assertEquals(0, result3.value.length);
GeneralEmpty<double[]> result4 = MAPPER.readValue(doc,
new TypeReference<GeneralEmpty<double[]>>() { });
assertNotNull(result4.value);
assertEquals(0, result4.value.length);
GeneralEmpty<boolean[]> result5 = MAPPER.readValue(doc,
new TypeReference<GeneralEmpty<boolean[]>>() { });
assertNotNull(result5.value);
assertEquals(0, result5.value.length);
}
}
package com.fasterxml.jackson.dataformat.xml.deser;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.Nulls;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
// for [databind#1402]; configurable null handling, specifically with SKIP
public class NullConversionsSkipTest extends XmlTestBase
{
static class NullSkipField {
public String nullsOk = "a";
@JsonSetter(nulls=Nulls.SKIP)
public String noNulls = "b";
}
static class NullSkipMethod {
String _nullsOk = "a";
String _noNulls = "b";
public void setNullsOk(String v) {
_nullsOk = v;
}
@JsonSetter(nulls=Nulls.SKIP)
public void setNoNulls(String v) {
_noNulls = v;
}
}
static class StringValue {
String value = "default";
public void setValue(String v) {
value = v;
}
}
/*
/**********************************************************
/* Test methods, straight annotation
/**********************************************************
*/
private final XmlMapper MAPPER = newMapper();
public void testSkipNullField1() throws Exception
{
// first, ok if assigning non-null to not-nullable, null for nullable
NullSkipField result = MAPPER.readValue(
//"<NullSkipField><noNulls>foo</noNulls><nullsOk></nullsOk></NullSkipField>",
"<NullSkipField><noNulls>foo</noNulls><nullsOk /></NullSkipField>",
NullSkipField.class);
assertEquals("foo", result.noNulls);
assertNull(result.nullsOk);
}
public void testSkipNullField2() throws Exception
{
// and then see that nulls are not ok for non-nullable
NullSkipField result = MAPPER.readValue("<NullSkipField><noNulls /></NullSkipField>",
NullSkipField.class);
assertEquals("b", result.noNulls);
assertEquals("a", result.nullsOk);
}
public void testSkipNullMethod1() throws Exception
{
NullSkipMethod result = MAPPER.readValue(
//"<NullSkipMethod><noNulls>foo<noNulls><nullsOk></nullsOk></NullSkipMethod>",
"<NullSkipMethod><noNulls>foo</noNulls><nullsOk /></NullSkipMethod>",
NullSkipMethod.class);
assertEquals("foo", result._noNulls);
assertNull(result._nullsOk);
}
public void testSkipNullMethod2() throws Exception
{
NullSkipMethod result = MAPPER.readValue("<NullSkipMethod><noNulls /></NullSkipMethod>",
NullSkipMethod.class);
assertEquals("b", result._noNulls);
assertEquals("a", result._nullsOk);
}
/*
/**********************************************************
/* Test methods, defaulting
/**********************************************************
*/
public void testSkipNullWithDefaults() throws Exception
{
// String doc = "<StringValue><value></value></StringValue>";
String doc = "<StringValue><value /></StringValue>";
StringValue result = MAPPER.readValue(doc, StringValue.class);
assertNull(result.value);
ObjectMapper mapper = newMapper();
mapper.configOverride(String.class)
.setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.SKIP));
result = mapper.readValue(doc, StringValue.class);
assertEquals("default", result.value);
}
}