|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.core.io.support.PathMatchingResourcePatternResolver
public class PathMatchingResourcePatternResolver
ResourcePatternResolver implementation that applies Ant-style path matching, using Spring's PathMatcher utility.
Locations can either be suitable for ResourceLoader.getResource
(URLs like "file:C:/context.xml", pseudo-URLs like "classpath:/context.xml",
relative file paths like "/WEB-INF/context.xml"), or Ant-style patterns
like "/WEB-INF/*-context.xml".
In the pattern case, the location has to be resolvable to java.io.File
or to a "jar:" URL (leading to a java.net.JarURLConnection
)
to allow for searching though the specified directory tree. In particular,
this is not guaranteed to work with a WAR file that is not expanded.
There is special support for retrieving multiple class path resources with the same name, via the "classpath*" prefix. For example, "classpath*:META-INF/beans.xml" will find all "beans.xml" files in the class path, be it in "classes" directories or in JAR files. This is particularly useful for autodetecting config files of the same name at the same location within each jar file.
The "classpath*:" prefix can also be combined with a PathMatcher pattern, for example "classpath*:META-INF/*-beans.xml". In this case, all matching resources in the class path will be found, even if multiple resources of the same name exist in different jar files.
WARNING: Note that "classpath*:" will only work reliably with at least
one root directory before the pattern starts, unless the actual target files
reside in the file system. This means that a pattern like "classpath*:*.xml"
will not retrieve files from the root of jar files but rather only from
the root of expanded directories. This originates from a limitation in the JDK's
ClassLoader.getResources
method which only returns file system
locations for a passed-in empty String (indicating potential roots to search).
Warning: Ant-style patterns with "classpath:" resources are not guaranteed to find matching resources if the root package to search is available in multiple class path locations. Preferably, use "classpath*:" with the same Ant-style pattern in such a case, which will search all class path locations that contain the root package.
If neither given a PathMatcher pattern nor a "classpath*:" location, this resolver will return a single resource via the underlying ResourceLoader.
ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
,
AntPathMatcher
,
ResourceLoader.getResource(String)
,
ClassLoader.getResources(String)
Field Summary | |
---|---|
protected Log |
logger
|
Fields inherited from interface org.springframework.core.io.support.ResourcePatternResolver |
---|
CLASSPATH_ALL_URL_PREFIX, CLASSPATH_URL_PREFIX |
Constructor Summary | |
---|---|
PathMatchingResourcePatternResolver()
Create a new PathMatchingResourcePatternResolver with a DefaultResourceLoader. |
|
PathMatchingResourcePatternResolver(ClassLoader classLoader)
Create a new PathMatchingResourcePatternResolver with a DefaultResourceLoader. |
|
PathMatchingResourcePatternResolver(ResourceLoader resourceLoader)
Create a new PathMatchingResourcePatternResolver. |
|
PathMatchingResourcePatternResolver(ResourceLoader resourceLoader,
ClassLoader classLoader)
Create a new PathMatchingResourcePatternResolver. |
Method Summary | |
---|---|
protected Resource |
convertClassLoaderURL(URL url)
Convert the given URL as returned from the ClassLoader into a Resource object. |
protected String |
determineRootDir(String location)
Determine the root directory for the given location. |
protected Set |
doFindMatchingFileSystemResources(File rootDir,
String subPattern)
Find all resources in the file system that match the given location pattern via the Ant-style PathMatcher. |
protected Set |
doFindPathMatchingFileResources(Resource rootDirResource,
String subPattern)
Find all resources in the file system that match the given location pattern via the Ant-style PathMatcher. |
protected Set |
doFindPathMatchingJarResources(Resource rootDirResource,
String subPattern)
Find all resources in jar files that match the given location pattern via the Ant-style PathMatcher. |
protected void |
doRetrieveMatchingFiles(String fullPattern,
File dir,
Set result)
Recursively retrieve files that match the given pattern, adding them to the given result list. |
protected Resource[] |
findAllClassPathResources(String location)
Find all class location resources with the given location via the ClassLoader. |
protected Resource[] |
findPathMatchingResources(String locationPattern)
Find all resources that match the given location pattern via the Ant-style PathMatcher. |
ClassLoader |
getClassLoader()
Return the ClassLoader that this pattern resolver works with (never null ). |
PathMatcher |
getPathMatcher()
Return the PathMatcher that this resource pattern resolver uses. |
Resource |
getResource(String location)
Return a Resource handle for the specified resource. |
ResourceLoader |
getResourceLoader()
Return the ResourceLoader that this pattern resolver works with. |
Resource[] |
getResources(String locationPattern)
Resolve the given location pattern into Resource objects. |
protected boolean |
isJarResource(Resource resource)
Return whether the given resource handle indicates a jar resource that the doFindPathMatchingJarResources method can handle. |
protected Set |
retrieveMatchingFiles(File rootDir,
String pattern)
Retrieve files that match the given path pattern, checking the given directory and its subdirectories. |
void |
setPathMatcher(PathMatcher pathMatcher)
Set the PathMatcher implementation to use for this resource pattern resolver. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final Log logger
Constructor Detail |
---|
public PathMatchingResourcePatternResolver()
ClassLoader access will happen via the thread context class loader.
DefaultResourceLoader
public PathMatchingResourcePatternResolver(ClassLoader classLoader)
classLoader
- the ClassLoader to load classpath resources with,
or null
for using the thread context class loaderDefaultResourceLoader
public PathMatchingResourcePatternResolver(ResourceLoader resourceLoader)
ClassLoader access will happen via the thread context class loader.
resourceLoader
- the ResourceLoader to load root directories and
actual resources withpublic PathMatchingResourcePatternResolver(ResourceLoader resourceLoader, ClassLoader classLoader)
resourceLoader
- the ResourceLoader to load root directories and
actual resources withclassLoader
- the ClassLoader to load classpath resources with,
or null
for using the thread context class loaderMethod Detail |
---|
public ResourceLoader getResourceLoader()
public ClassLoader getClassLoader()
null
).
public void setPathMatcher(PathMatcher pathMatcher)
AntPathMatcher
public PathMatcher getPathMatcher()
public Resource getResource(String location)
ResourceLoader
getInputStream
calls.
Note that a Resource handle does not imply an existing resource; you need to invoke Resource's "exists" to check for existence.
getResource
in interface ResourceLoader
location
- the resource location
ResourceLoader.CLASSPATH_URL_PREFIX
,
Resource.exists()
,
InputStreamSource.getInputStream()
public Resource[] getResources(String locationPattern) throws IOException
ResourcePatternResolver
Overlapping resource entries that point to the same physical resource should be avoided, as far as possible. The result should have set semantics.
getResources
in interface ResourcePatternResolver
locationPattern
- the location pattern to resolve
IOException
- in case of I/O errorsprotected Resource[] findAllClassPathResources(String location) throws IOException
location
- the absolute path within the classpath
IOException
- in case of I/O errorsClassLoader.getResources(java.lang.String)
,
convertClassLoaderURL(java.net.URL)
protected Resource convertClassLoaderURL(URL url)
The default implementation simply creates a UrlResource instance.
url
- a URL as returned from the ClassLoader
ClassLoader.getResources(java.lang.String)
,
Resource
protected Resource[] findPathMatchingResources(String locationPattern) throws IOException
locationPattern
- the location pattern to match
IOException
- in case of I/O errorsdoFindPathMatchingJarResources(org.springframework.core.io.Resource, java.lang.String)
,
doFindPathMatchingFileResources(org.springframework.core.io.Resource, java.lang.String)
,
PathMatcher
protected String determineRootDir(String location)
Used for determining the starting point for file matching,
resolving the root directory location to a java.io.File
and passing it into retrieveMatchingFiles
, with the
remainder of the location as pattern.
Will return "/WEB-INF" for the pattern "/WEB-INF/*.xml", for example.
location
- the location to check
retrieveMatchingFiles(java.io.File, java.lang.String)
protected boolean isJarResource(Resource resource) throws IOException
doFindPathMatchingJarResources
method can handle.
The default implementation checks against the URL protocols "jar", "zip" and "wsjar" (the latter are used by BEA WebLogic Server and IBM WebSphere, respectively, but can be treated like jar files).
resource
- the resource handle to check
(usually the root directory to start path matching from)
IOException
doFindPathMatchingJarResources(org.springframework.core.io.Resource, java.lang.String)
protected Set doFindPathMatchingJarResources(Resource rootDirResource, String subPattern) throws IOException
rootDirResource
- the root directory as ResourcesubPattern
- the sub pattern to match (below the root directory)
IOException
- in case of I/O errorsJarURLConnection
,
PathMatcher
protected Set doFindPathMatchingFileResources(Resource rootDirResource, String subPattern) throws IOException
rootDirResource
- the root directory as ResourcesubPattern
- the sub pattern to match (below the root directory)
IOException
- in case of I/O errorsretrieveMatchingFiles(java.io.File, java.lang.String)
,
PathMatcher
protected Set doFindMatchingFileSystemResources(File rootDir, String subPattern) throws IOException
rootDir
- the root directory in the file systemsubPattern
- the sub pattern to match (below the root directory)
IOException
- in case of I/O errorsretrieveMatchingFiles(java.io.File, java.lang.String)
,
PathMatcher
protected Set retrieveMatchingFiles(File rootDir, String pattern) throws IOException
rootDir
- the directory to start frompattern
- the pattern to match against,
relative to the root directory
IOException
- if directory contents could not be retrievedprotected void doRetrieveMatchingFiles(String fullPattern, File dir, Set result) throws IOException
fullPattern
- the pattern to match against,
with preprended root directory pathdir
- the current directoryresult
- the Set of matching File instances to add to
IOException
- if directory contents could not be retrieved
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |