blob: 8239e41b4b512ddb2d9c35c55c3c4dc3e0a778ab [file] [log] [blame]
package org.codehaus.jackson.map.deser;
import org.codehaus.jackson.*;
import org.codehaus.jackson.annotate.*;
import org.codehaus.jackson.map.*;
import org.codehaus.jackson.type.JavaType;
// for [JACKSON-774]
@SuppressWarnings("rawtypes")
public class TestCreatorNullValue extends BaseMapTest
{
private static class Container {
Contained<String> contained;
@SuppressWarnings("unused")
@JsonCreator
public Container(@JsonProperty("contained") Contained<String> contained) {
this.contained = contained;
}
}
private static interface Contained<T> {}
private static class NullContained implements Contained<Object> {}
private static final NullContained NULL_CONTAINED = new NullContained();
private static class ContainedDeserializer extends JsonDeserializer<Contained> {
@Override
public Contained deserialize(JsonParser jp, DeserializationContext ctxt) throws JsonProcessingException {
return null;
}
@Override
public Contained getNullValue() {
return NULL_CONTAINED;
}
}
private static class ContainerDeserializerResolver extends Deserializers.Base {
@Override
public JsonDeserializer<?> findBeanDeserializer(JavaType type,
DeserializationConfig config, DeserializerProvider provider, BeanDescription beanDesc, BeanProperty property)
throws JsonMappingException {
if (!Contained.class.isAssignableFrom(type.getRawClass())) {
return null;
} else {
return new ContainedDeserializer();
}
}
}
private static class TestModule extends Module {
@Override
public String getModuleName() {
return "ContainedModule";
}
@Override
public Version version() {
return Version.unknownVersion();
}
@Override
public void setupModule(SetupContext setupContext) {
setupContext.addDeserializers(new ContainerDeserializerResolver());
}
}
/*
/**********************************************************
/* Unit tests
/**********************************************************
*/
public void testUsesDeserializersNullValue() throws Exception {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new TestModule());
Container container = mapper.readValue("{}", Container.class);
assertEquals(NULL_CONTAINED, container.contained);
}
}