From c730b8f479b7f8a03e9b6bc02beda5da375f09ef Mon Sep 17 00:00:00 2001 From: Thomas Darimont Date: Thu, 12 Dec 2013 09:58:55 +0100 Subject: [PATCH] DATAMONGO-813 - Improve handling for non-existing resources in GridFSTemplate. We now return null for a non-existing resource instead of throwing a NPE. Original pull request: #106. --- .../data/mongodb/gridfs/GridFsOperations.java | 5 +++-- .../data/mongodb/gridfs/GridFsTemplate.java | 7 +++++-- ...Tests.java => GridFsTemplateIntegrationTests.java} | 11 ++++++++++- 3 files changed, 18 insertions(+), 5 deletions(-) rename spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/{GridFsTemplateIIntegrationTests.java => GridFsTemplateIntegrationTests.java} (95%) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java index 3506ffbec..443e5d84b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2012 the original author or authors. + * Copyright 2011-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,6 +31,7 @@ import com.mongodb.gridfs.GridFSFile; * * @author Oliver Gierke * @author Philipp Schneider + * @author Thomas Darimont */ public interface GridFsOperations extends ResourcePatternResolver { @@ -126,7 +127,7 @@ public interface GridFsOperations extends ResourcePatternResolver { * Returns all {@link GridFsResource} with the given file name. * * @param filename - * @return + * @return the resource if it exists or {@literal null}. * @see ResourcePatternResolver#getResource(String) */ GridFsResource getResource(String filename); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java index c39f18456..dee25a529 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2012 the original author or authors. + * Copyright 2011-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,6 +43,7 @@ import com.mongodb.gridfs.GridFSInputFile; * * @author Oliver Gierke * @author Philipp Schneider + * @author Thomas Darimont */ public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver { @@ -198,7 +199,9 @@ public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver * @see org.springframework.core.io.ResourceLoader#getResource(java.lang.String) */ public GridFsResource getResource(String location) { - return new GridFsResource(findOne(query(whereFilename().is(location)))); + + GridFSDBFile file = findOne(query(whereFilename().is(location))); + return file != null ? new GridFsResource(file) : null; } /* diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIntegrationTests.java similarity index 95% rename from spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIIntegrationTests.java rename to spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIntegrationTests.java index cda7c5c02..3fcfb405a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIntegrationTests.java @@ -45,10 +45,11 @@ import com.mongodb.gridfs.GridFSFile; * * @author Oliver Gierke * @author Philipp Schneider + * @author Thomas Darimont */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:gridfs/gridfs.xml") -public class GridFsTemplateIIntegrationTests { +public class GridFsTemplateIntegrationTests { Resource resource = new ClassPathResource("gridfs/gridfs.xml"); @@ -162,6 +163,14 @@ public class GridFsTemplateIIntegrationTests { assertSame(result.get(0), reference); } + /** + * @see DATAMONGO-813 + */ + @Test + public void getResourceShouldReturnNullForNonExistingResource() { + assertThat(operations.getResource("doesnotexist"), is(nullValue())); + } + private static void assertSame(GridFSFile left, GridFSFile right) { assertThat(left.getId(), is(right.getId()));