Skip to content
This repository was archived by the owner on Jan 20, 2025. It is now read-only.

Commit c2f772d

Browse files
committed
Added a test for #37, noting fix requires 2.3.3 of jackson-databind
1 parent 7573622 commit c2f772d

File tree

4 files changed

+31
-7
lines changed

4 files changed

+31
-7
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Guava (http://code.google.com/p/guava-libraries/) types (currently mostly just c
2929
</contributors>
3030

3131
<properties>
32-
<version.jackson>2.3.2</version.jackson>
32+
<version.jackson>2.3.3-SNAPSHOT</version.jackson>
3333

3434
<!-- Generate PackageVersion.java into this directory. -->
3535
<packageVersion.dir>com/fasterxml/jackson/datatype/guava</packageVersion.dir>

release-notes/VERSION

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
Project: jackson-datatype-guava
22
Version: 2.3.3 (xx-xxx-2014)
33

4+
#37: `Optional` not correctly deserialized from JSON null, if inside a Collection
5+
(reported by JYang-Addepar@github)
46
#41: `Multimap` serializer does not honor @JsonInclude(JsonInclude.Include.NON_EMPTY)
57
(reported by Olve S-H)
68

src/main/java/com/fasterxml/jackson/datatype/guava/deser/GuavaOptionalDeserializer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public Optional<?> deserialize(JsonParser jp, DeserializationContext ctxt) throw
9191
JsonProcessingException
9292
{
9393
Object refd;
94-
94+
9595
if (_valueTypeDeserializer == null) {
9696
refd = _valueDeserializer.deserialize(jp, ctxt);
9797
} else {
@@ -119,7 +119,6 @@ public Optional<?> deserializeWithType(JsonParser jp, DeserializationContext ctx
119119
return deserialize(jp, ctxt);
120120
}
121121
// with type deserializer to use here? Looks like we get passed same one?
122-
Object ref = typeDeserializer.deserializeTypedFromAny(jp, ctxt);
123-
return Optional.of(ref);
122+
return Optional.of(typeDeserializer.deserializeTypedFromAny(jp, ctxt));
124123
}
125124
}

src/test/java/com/fasterxml/jackson/datatype/guava/TestOptional.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package com.fasterxml.jackson.datatype.guava;
22

3+
import java.util.*;
4+
35
import com.fasterxml.jackson.annotation.*;
46
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
5-
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
67

78
import com.fasterxml.jackson.core.type.TypeReference;
89

@@ -37,7 +38,7 @@ public void link(Unit u) {
3738
baseUnit = Optional.of(u);
3839
}
3940
}
40-
41+
4142
/*
4243
/**********************************************************************
4344
/* Test methods
@@ -137,7 +138,7 @@ public void testWithTypingEnabled() throws Exception
137138
assertEquals(myData.myString, deserializedMyData.myString);
138139
}
139140

140-
// for [Issue#17]
141+
// [Issue#17]
141142
public void testObjectId() throws Exception
142143
{
143144
final Unit input = new Unit();
@@ -150,4 +151,26 @@ public void testObjectId() throws Exception
150151
Unit base = result.baseUnit.get();
151152
assertSame(result, base);
152153
}
154+
155+
// [Issue#37]
156+
public void testOptionalCollection() throws Exception {
157+
ObjectMapper mapper = new ObjectMapper().registerModule(new GuavaModule());
158+
159+
TypeReference<List<Optional<String>>> typeReference =
160+
new TypeReference<List<Optional<String>>>() {};
161+
162+
List<Optional<String>> list = new ArrayList<Optional<String>>();
163+
list.add(Optional.of("2014-1-22"));
164+
list.add(Optional.<String>absent());
165+
list.add(Optional.of("2014-1-23"));
166+
167+
String str = mapper.writeValueAsString(list);
168+
assertEquals("[\"2014-1-22\",null,\"2014-1-23\"]", str);
169+
170+
List<Optional<String>> result = mapper.readValue(str, typeReference);
171+
assertEquals(list.size(), result.size());
172+
for (int i = 0; i < list.size(); ++i) {
173+
assertEquals("Entry #"+i, list.get(i), result.get(i));
174+
}
175+
}
153176
}

0 commit comments

Comments
 (0)