diff --git a/src/main/java/com/fasterxml/jackson/databind/DeserializationContext.java b/src/main/java/com/fasterxml/jackson/databind/DeserializationContext.java index 6d799118a3..c65c6b12ac 100644 --- a/src/main/java/com/fasterxml/jackson/databind/DeserializationContext.java +++ b/src/main/java/com/fasterxml/jackson/databind/DeserializationContext.java @@ -205,8 +205,11 @@ protected DeserializationContext(DeserializationContext src, { _cache = src._cache; _factory = src._factory; - _readCapabilities = p.getReadCapabilities(); - + // 08-Jun-2020. tatu: Called only for `ObjectMapper.canDeserialize()` + // (see [databind#2749]), not sure what's the best work-around but + // start with this: + _readCapabilities = (p == null) ? null : p.getReadCapabilities(); + _config = config; _featureFlags = config.getDeserializationFeatures(); _view = config.getActiveView(); diff --git a/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java b/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java index b5899b15f7..cc4263e4a2 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java +++ b/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java @@ -3324,7 +3324,7 @@ public boolean canDeserialize(JavaType type, AtomicReference cause) return createDeserializationContext(null, getDeserializationConfig()).hasValueDeserializerFor(type, cause); } - + /* /********************************************************** /* Extended Public API, deserialization, diff --git a/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java b/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java index 7f1daa511a..96989bf2fc 100644 --- a/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java @@ -251,7 +251,6 @@ public void testConfigForPropertySorting() throws Exception assertTrue(dc.shouldSortPropertiesAlphabetically()); } - public void testJsonFactoryLinkage() { // first, implicit factory, giving implicit linkage @@ -342,6 +341,13 @@ public void testEmptyBeanSerializability() .canSerialize(EmptyBean.class)); } + // for [databind#2749]: just to check there's no NPE; method really not useful + public void testCanDeserialize() + { + assertTrue(MAPPER.canDeserialize(MAPPER.constructType(EmptyBean.class))); + assertTrue(MAPPER.canDeserialize(MAPPER.constructType(Object.class))); + } + // for [databind#898] public void testSerializerProviderAccess() throws Exception {