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

Commit cbe03c3

Browse files
committed
Merge pull request #58 from FasterXML/fluent-iterable-2.4
FluentIterable serialization doens't work for Bean Properties
2 parents e81b326 + 3c47cd8 commit cbe03c3

File tree

2 files changed

+41
-13
lines changed

2 files changed

+41
-13
lines changed

src/main/java/com/fasterxml/jackson/datatype/guava/GuavaSerializers.java

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

3+
import com.fasterxml.jackson.databind.ser.std.IterableSerializer;
4+
import com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer;
5+
import com.fasterxml.jackson.databind.type.TypeFactory;
6+
import com.fasterxml.jackson.databind.util.Converter;
7+
import com.fasterxml.jackson.databind.util.StdConverter;
38
import com.google.common.base.Optional;
49
import com.google.common.cache.CacheBuilder;
510
import com.google.common.cache.CacheBuilderSpec;
11+
import com.google.common.collect.FluentIterable;
612
import com.google.common.collect.Multimap;
713
import com.google.common.collect.Range;
814
import com.google.common.net.HostAndPort;
@@ -16,8 +22,19 @@
1622
import com.fasterxml.jackson.datatype.guava.ser.MultimapSerializer;
1723
import com.fasterxml.jackson.datatype.guava.ser.RangeSerializer;
1824

25+
import java.util.Iterator;
26+
1927
public class GuavaSerializers extends Serializers.Base
2028
{
29+
static class FluentConverter extends StdConverter<Object,Iterable<?>> {
30+
static final FluentConverter instance = new FluentConverter();
31+
32+
@Override
33+
public Iterable<?> convert(Object value) {
34+
return (Iterable<?>) value;
35+
}
36+
}
37+
2138
@Override
2239
public JsonSerializer<?> findSerializer(SerializationConfig config, JavaType type, BeanDescription beanDesc)
2340
{
@@ -40,6 +57,14 @@ public JsonSerializer<?> findSerializer(SerializationConfig config, JavaType typ
4057
if (CacheBuilderSpec.class.isAssignableFrom(raw) || CacheBuilder.class.isAssignableFrom(raw)) {
4158
return ToStringSerializer.instance;
4259
}
60+
// since 2.4.5
61+
if (FluentIterable.class.isAssignableFrom(raw)) {
62+
JavaType[] params = config.getTypeFactory().findTypeParameters(type, Iterable.class);
63+
JavaType vt = (params == null || params.length != 1) ?
64+
TypeFactory.unknownType() : params[0];
65+
JavaType delegate = config.getTypeFactory().constructParametricType(Iterable.class, vt);
66+
return new StdDelegatingSerializer(FluentConverter.instance, delegate, null);
67+
}
4368
return super.findSerializer(config, type, beanDesc);
4469
}
4570

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

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,12 @@ public class FluentIterableTest extends ModuleTestBase
1414
{
1515
private final ObjectMapper MAPPER = mapperWithModule();
1616

17-
FluentIterable<Integer> createFluentIterable() {
18-
return new FluentIterable<Integer>() {
19-
private final Iterable<Integer> _iterable = Sets.newHashSet(1, 2, 3);
20-
@Override
21-
public Iterator<Integer> iterator() {
22-
return _iterable.iterator();
23-
}
24-
};
17+
public static class FluentHolder {
18+
public final Iterable<Integer> value = createFluentIterable();
19+
}
20+
21+
static FluentIterable<Integer> createFluentIterable() {
22+
return FluentIterable.from(Sets.newHashSet(1, 2, 3));
2523
}
2624

2725
/**
@@ -31,15 +29,20 @@ public Iterator<Integer> iterator() {
3129
*/
3230
public void testSerializationWithoutModule() throws Exception {
3331
ObjectMapper mapper = new ObjectMapper();
34-
Iterable<Integer> fluentIterable = createFluentIterable();
35-
String json = mapper.writeValueAsString(fluentIterable);
36-
assertEquals("{\"empty\":false}", json);
32+
FluentHolder holder = new FluentHolder();
33+
String json = mapper.writeValueAsString(holder);
34+
assertEquals("{\"value\":{\"empty\":false}}", json);
3735
}
3836

3937
public void testSerialization() throws Exception {
40-
Iterable<Integer> fluentIterable = createFluentIterable();
41-
String json = MAPPER.writeValueAsString(fluentIterable);
38+
String json = MAPPER.writeValueAsString(createFluentIterable());
4239
assertEquals("[1,2,3]", json);
4340
}
4441

42+
public void testWrappedSerialization() throws Exception {
43+
FluentHolder holder = new FluentHolder();
44+
String json = MAPPER.writeValueAsString(holder);
45+
assertEquals("{\"value\":[1,2,3]}", json);
46+
}
47+
4548
}

0 commit comments

Comments
 (0)