diff --git a/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java b/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java index 7c5bdae588..bce818566b 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java +++ b/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java @@ -1274,6 +1274,7 @@ public T readValue(File src, Class valueType) throws IOException @SuppressWarnings({ "unchecked" }) public T readValue(File src, TypeReference valueTypeRef) throws IOException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), _typeFactory.constructType(valueTypeRef)); @@ -1295,6 +1296,7 @@ public T readValue(File src, TypeReference valueTypeRef) throws IOExcepti public T readValue(File src, JavaType valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), valueType); } @@ -1321,6 +1323,7 @@ public T readValue(File src, JavaType valueType) public T readValue(URL src, Class valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), _typeFactory.constructType(valueType)); @@ -1332,6 +1335,7 @@ public T readValue(URL src, Class valueType) @SuppressWarnings({ "unchecked" }) public T readValue(URL src, TypeReference valueTypeRef) throws IOException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), _typeFactory.constructType(valueTypeRef)); @@ -1364,6 +1368,7 @@ public T readValue(URL src, JavaType valueType) throws IOException public T readValue(String content, Class valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("content", content); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, content), _typeFactory.constructType(valueType)); @@ -1384,6 +1389,7 @@ public T readValue(String content, Class valueType) @SuppressWarnings({ "unchecked" }) public T readValue(String content, TypeReference valueTypeRef) throws IOException { + assertNotNull("content", content); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, content), _typeFactory.constructType(valueTypeRef)); @@ -1405,6 +1411,7 @@ public T readValue(String content, TypeReference valueTypeRef) throws IOE public T readValue(String content, JavaType valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("content", content); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, content), valueType); @@ -1414,6 +1421,7 @@ public T readValue(String content, JavaType valueType) public T readValue(Reader src, Class valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), _typeFactory.constructType(valueType)); @@ -1423,6 +1431,7 @@ public T readValue(Reader src, Class valueType) public T readValue(Reader src, TypeReference valueTypeRef) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), _typeFactory.constructType(valueTypeRef)); @@ -1432,6 +1441,7 @@ public T readValue(Reader src, TypeReference valueTypeRef) public T readValue(Reader src, JavaType valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), valueType); @@ -1441,6 +1451,7 @@ public T readValue(Reader src, JavaType valueType) public T readValue(InputStream src, Class valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), _typeFactory.constructType(valueType)); @@ -1450,6 +1461,7 @@ public T readValue(InputStream src, Class valueType) public T readValue(InputStream src, TypeReference valueTypeRef) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), _typeFactory.constructType(valueTypeRef)); @@ -1459,6 +1471,7 @@ public T readValue(InputStream src, TypeReference valueTypeRef) public T readValue(InputStream src, JavaType valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), valueType); @@ -1468,6 +1481,7 @@ public T readValue(InputStream src, JavaType valueType) public T readValue(byte[] src, Class valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), _typeFactory.constructType(valueType)); @@ -1477,6 +1491,7 @@ public T readValue(byte[] src, Class valueType) public T readValue(byte[] src, int offset, int len, Class valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src, offset, len), _typeFactory.constructType(valueType)); @@ -1486,6 +1501,7 @@ public T readValue(byte[] src, int offset, int len, Class valueType) public T readValue(byte[] src, TypeReference valueTypeRef) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), _typeFactory.constructType(valueTypeRef)); @@ -1495,6 +1511,7 @@ public T readValue(byte[] src, TypeReference valueTypeRef) public T readValue(byte[] src, int offset, int len, TypeReference valueTypeRef) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src, offset, len), _typeFactory.constructType(valueTypeRef)); @@ -1504,6 +1521,7 @@ public T readValue(byte[] src, int offset, int len, TypeReference valueTy public T readValue(byte[] src, JavaType valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), valueType); @@ -1514,6 +1532,7 @@ public T readValue(byte[] src, int offset, int len, JavaType valueType) throws IOException, JsonParseException, JsonMappingException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src, offset, len), valueType); @@ -1522,6 +1541,7 @@ public T readValue(byte[] src, int offset, int len, @SuppressWarnings("unchecked") public T readValue(DataInput src, Class valueType) throws IOException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), _typeFactory.constructType(valueType)); @@ -1530,11 +1550,18 @@ public T readValue(DataInput src, Class valueType) throws IOException @SuppressWarnings("unchecked") public T readValue(DataInput src, JavaType valueType) throws IOException { + assertNotNull("src", src); DefaultDeserializationContext ctxt = createDeserializationContext(); return (T) _readMapAndClose(ctxt, _streamFactory.createParser(ctxt, src), valueType); } + private void assertNotNull(String paramName, Object src) { + if (src==null){ + throw new IllegalArgumentException(paramName + " is null"); + } + } + /* /********************************************************************** /* Public API: serialization (mapping from Java types to external format) diff --git a/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java b/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java index 1abe5092e2..25d0fd7b2e 100644 --- a/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/ObjectMapperTest.java @@ -242,4 +242,16 @@ public void testDataInputViaMapper() throws Exception .readTree(input); assertNotNull(n); } + + public void testReadValueWithNullInputStream() throws Exception { + ObjectMapper m = new ObjectMapper(); + InputStream is = null; + try { + m.readValue(is, Object.class); + } catch (IllegalArgumentException e) { + assertEquals("src is null", e.getMessage()); + return; + } + fail("Specific exception expected"); + } }