Merge branch '6.0.x'
This commit is contained in:
@@ -754,6 +754,7 @@ public class PathMatchingResourcePatternResolver implements ResourcePatternResol
|
||||
protected Set<Resource> doFindPathMatchingFileResources(Resource rootDirResource, String subPattern)
|
||||
throws IOException {
|
||||
|
||||
Set<Resource> result = new LinkedHashSet<>();
|
||||
URI rootDirUri;
|
||||
try {
|
||||
rootDirUri = rootDirResource.getURI();
|
||||
@@ -762,7 +763,7 @@ public class PathMatchingResourcePatternResolver implements ResourcePatternResol
|
||||
if (logger.isWarnEnabled()) {
|
||||
logger.warn("Failed to resolve directory [%s] as URI: %s".formatted(rootDirResource, ex));
|
||||
}
|
||||
return Collections.emptySet();
|
||||
return result;
|
||||
}
|
||||
|
||||
Path rootPath = null;
|
||||
@@ -791,6 +792,14 @@ public class PathMatchingResourcePatternResolver implements ResourcePatternResol
|
||||
rootPath = Path.of(rootDirResource.getFile().getAbsolutePath());
|
||||
}
|
||||
|
||||
if (!Files.exists(rootPath)) {
|
||||
if (logger.isInfoEnabled()) {
|
||||
logger.info("Skipping search for files matching pattern [%s]: directory [%s] does not exist"
|
||||
.formatted(subPattern, rootPath.toAbsolutePath()));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
String rootDir = StringUtils.cleanPath(rootPath.toString());
|
||||
if (!rootDir.endsWith("/")) {
|
||||
rootDir += "/";
|
||||
@@ -806,7 +815,6 @@ public class PathMatchingResourcePatternResolver implements ResourcePatternResol
|
||||
.formatted(rootPath.toAbsolutePath(), subPattern));
|
||||
}
|
||||
|
||||
Set<Resource> result = new LinkedHashSet<>();
|
||||
try (Stream<Path> files = Files.walk(rootPath)) {
|
||||
files.filter(isMatchingFile).sorted().map(FileSystemResource::new).forEach(result::add);
|
||||
}
|
||||
|
||||
@@ -90,6 +90,19 @@ class PathMatchingResourcePatternResolverTests {
|
||||
assertFilenames(pattern, expectedFilenames);
|
||||
}
|
||||
|
||||
@Test // gh-31111
|
||||
void usingFileProtocolWithWildcardInPatternAndNonexistentRootPath() throws IOException {
|
||||
Path testResourcesDir = Paths.get("src/test/resources").toAbsolutePath();
|
||||
String pattern = String.format("file:%s/example/bogus/**", testResourcesDir);
|
||||
assertThat(resolver.getResources(pattern)).isEmpty();
|
||||
// When the log level for the resolver is set to at least INFO, we should see
|
||||
// a log entry similar to the following.
|
||||
//
|
||||
// [main] INFO o.s.c.i.s.PathMatchingResourcePatternResolver -
|
||||
// Skipping search for files matching pattern [**]: directory
|
||||
// [/<...>/spring-core/src/test/resources/example/bogus] does not exist
|
||||
}
|
||||
|
||||
@Test
|
||||
void encodedHashtagInPath() throws IOException {
|
||||
Path rootDir = Paths.get("src/test/resources/custom%23root").toAbsolutePath();
|
||||
|
||||
Reference in New Issue
Block a user