Skip to content

Commit 61c226c

Browse files
committed
back port test for #745 from master
1 parent b6e3fbf commit 61c226c

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

src/test/java/com/fasterxml/jackson/databind/deser/TestEnumDeserialization.java

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.IOException;
44
import java.math.BigDecimal;
5+
import java.util.Collection;
56
import java.util.EnumMap;
67
import java.util.EnumSet;
78
import java.util.Map;
@@ -12,7 +13,9 @@
1213
import com.fasterxml.jackson.core.type.TypeReference;
1314
import com.fasterxml.jackson.databind.*;
1415
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
16+
import com.fasterxml.jackson.databind.deser.std.EnumDeserializer;
1517
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
18+
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
1619
import com.fasterxml.jackson.databind.module.SimpleModule;
1720

1821
@SuppressWarnings("serial")
@@ -123,7 +126,34 @@ protected enum TestEnum324
123126
throw new RuntimeException("Foobar!");
124127
}
125128
}
126-
129+
130+
// [Issue#745]
131+
static class DelegatingDeserializers extends Deserializers.Base
132+
{
133+
@Override
134+
public JsonDeserializer<?> findEnumDeserializer(final Class<?> type, final DeserializationConfig config, final BeanDescription beanDesc) throws JsonMappingException {
135+
final Collection<AnnotatedMethod> factoryMethods = beanDesc.getFactoryMethods();
136+
if (factoryMethods != null) {
137+
for (AnnotatedMethod am : factoryMethods) {
138+
final JsonCreator creator = am.getAnnotation(JsonCreator.class);
139+
if (creator != null) {
140+
return EnumDeserializer.deserializerForCreator(config, type, am);
141+
}
142+
}
143+
}
144+
return null;
145+
}
146+
}
147+
148+
// [Issue#745]
149+
static class DelegatingDeserializersModule extends SimpleModule
150+
{
151+
@Override
152+
public void setupModule(final SetupContext context) {
153+
context.addDeserializers(new DelegatingDeserializers());
154+
}
155+
}
156+
127157
/*
128158
/**********************************************************
129159
/* Tests
@@ -424,4 +454,14 @@ public void testIndexAsString() throws Exception
424454
en = MAPPER.readValue(quote("1"), TestEnum.class);
425455
assertSame(TestEnum.values()[1], en);
426456
}
457+
458+
// [Issue#745]
459+
public void testDeserializerForCreatorWithEnumMaps() throws Exception
460+
{
461+
final ObjectMapper mapper = new ObjectMapper();
462+
mapper.registerModule(new DelegatingDeserializersModule());
463+
EnumMap<EnumWithCreator,String> value = mapper.readValue("{\"enumA\":\"value\"}",
464+
new TypeReference<EnumMap<EnumWithCreator,String>>() {});
465+
assertEquals("value", value.get(EnumWithCreator.A));
466+
}
427467
}

0 commit comments

Comments
 (0)