This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 9.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 90b564ce38fa5d6a8894b63245330f38ae0551f4 Author: Mark Thomas <ma...@apache.org> AuthorDate: Tue Jan 24 12:24:04 2023 +0000 Code cleanup (format). No functional change. --- .../webresources/AbstractArchiveResource.java | 22 ++-- .../webresources/AbstractArchiveResourceSet.java | 73 +++++------ .../webresources/AbstractFileResourceSet.java | 21 ++-- .../catalina/webresources/AbstractResource.java | 3 +- .../catalina/webresources/AbstractResourceSet.java | 8 +- .../AbstractSingleArchiveResource.java | 4 +- .../AbstractSingleArchiveResourceSet.java | 14 +-- java/org/apache/catalina/webresources/Cache.java | 42 +++---- .../catalina/webresources/CachedResource.java | 63 ++++------ .../webresources/ClasspathURLStreamHandler.java | 3 +- .../catalina/webresources/DirResourceSet.java | 45 +++---- .../catalina/webresources/EmptyResourceSet.java | 10 +- .../catalina/webresources/ExtractingRoot.java | 15 +-- .../apache/catalina/webresources/FileResource.java | 32 ++--- .../catalina/webresources/FileResourceSet.java | 38 +++--- .../apache/catalina/webresources/JarContents.java | 37 +++--- .../apache/catalina/webresources/JarResource.java | 7 +- .../catalina/webresources/JarResourceRoot.java | 7 +- .../catalina/webresources/JarResourceSet.java | 33 ++--- .../catalina/webresources/JarWarResource.java | 16 +-- .../catalina/webresources/JarWarResourceSet.java | 69 ++++------- .../apache/catalina/webresources/StandardRoot.java | 136 ++++++++------------- .../webresources/TomcatJarInputStream.java | 5 +- .../TomcatURLStreamHandlerFactory.java | 44 +++---- .../catalina/webresources/VirtualResource.java | 3 +- .../apache/catalina/webresources/WarResource.java | 10 +- .../catalina/webresources/WarResourceSet.java | 25 ++-- 27 files changed, 306 insertions(+), 479 deletions(-) diff --git a/java/org/apache/catalina/webresources/AbstractArchiveResource.java b/java/org/apache/catalina/webresources/AbstractArchiveResource.java index 8e4daffddc..982d676f12 100644 --- a/java/org/apache/catalina/webresources/AbstractArchiveResource.java +++ b/java/org/apache/catalina/webresources/AbstractArchiveResource.java @@ -40,8 +40,8 @@ public abstract class AbstractArchiveResource extends AbstractResource { private boolean readCerts = false; private Certificate[] certificates; - protected AbstractArchiveResource(AbstractArchiveResourceSet archiveResourceSet, - String webAppPath, String baseUrl, JarEntry jarEntry, String codeBaseUrl) { + protected AbstractArchiveResource(AbstractArchiveResourceSet archiveResourceSet, String webAppPath, String baseUrl, + JarEntry jarEntry, String codeBaseUrl) { super(archiveResourceSet.getRoot(), webAppPath); this.archiveResourceSet = archiveResourceSet; this.baseUrl = baseUrl; @@ -53,8 +53,7 @@ public abstract class AbstractArchiveResource extends AbstractResource { resourceName = resourceName.substring(0, resourceName.length() - 1); } String internalPath = archiveResourceSet.getInternalPath(); - if (internalPath.length() > 0 && resourceName.equals( - internalPath.subSequence(1, internalPath.length()))) { + if (internalPath.length() > 0 && resourceName.equals(internalPath.subSequence(1, internalPath.length()))) { name = ""; } else { int index = resourceName.lastIndexOf('/'); @@ -171,9 +170,8 @@ public abstract class AbstractArchiveResource extends AbstractResource { if (len > Integer.MAX_VALUE) { // Can't create an array that big - throw new ArrayIndexOutOfBoundsException(sm.getString( - "abstractResource.getContentTooLarge", getWebappPath(), - Long.valueOf(len))); + throw new ArrayIndexOutOfBoundsException( + sm.getString("abstractResource.getContentTooLarge", getWebappPath(), Long.valueOf(len))); } if (len < 0) { @@ -202,8 +200,7 @@ public abstract class AbstractArchiveResource extends AbstractResource { readCerts = true; } catch (IOException ioe) { if (getLog().isDebugEnabled()) { - getLog().debug(sm.getString("abstractResource.getContentFail", - getWebappPath()), ioe); + getLog().debug(sm.getString("abstractResource.getContentFail", getWebappPath()), ioe); } // Don't return corrupted content return null; @@ -238,10 +235,9 @@ public abstract class AbstractArchiveResource extends AbstractResource { protected abstract JarInputStreamWrapper getJarInputStreamWrapper(); /** - * This wrapper assumes that the InputStream was created from a JarFile - * obtained from a call to getArchiveResourceSet().openJarFile(). If this is - * not the case then the usage counting in AbstractArchiveResourceSet will - * break and the JarFile may be unexpectedly closed. + * This wrapper assumes that the InputStream was created from a JarFile obtained from a call to + * getArchiveResourceSet().openJarFile(). If this is not the case then the usage counting in + * AbstractArchiveResourceSet will break and the JarFile may be unexpectedly closed. */ protected class JarInputStreamWrapper extends InputStream { diff --git a/java/org/apache/catalina/webresources/AbstractArchiveResourceSet.java b/java/org/apache/catalina/webresources/AbstractArchiveResourceSet.java index d36d96549b..2352775c40 100644 --- a/java/org/apache/catalina/webresources/AbstractArchiveResourceSet.java +++ b/java/org/apache/catalina/webresources/AbstractArchiveResourceSet.java @@ -37,7 +37,7 @@ public abstract class AbstractArchiveResourceSet extends AbstractResourceSet { private URL baseUrl; private String baseUrlString; private JarFile archive = null; - protected Map<String,JarEntry> archiveEntries = null; + protected Map<String, JarEntry> archiveEntries = null; protected final Object archiveLock = new Object(); private long archiveUseCount = 0; private JarContents jarContents; @@ -69,18 +69,15 @@ public abstract class AbstractArchiveResourceSet extends AbstractResourceSet { ArrayList<String> result = new ArrayList<>(); if (path.startsWith(webAppMount)) { - String pathInJar = - getInternalPath() + path.substring(webAppMount.length()); + String pathInJar = getInternalPath() + path.substring(webAppMount.length()); // Always strip off the leading '/' to get the JAR path if (pathInJar.length() > 0 && pathInJar.charAt(0) == '/') { pathInJar = pathInJar.substring(1); } for (String name : getArchiveEntries(false).keySet()) { - if (name.length() > pathInJar.length() && - name.startsWith(pathInJar)) { + if (name.length() > pathInJar.length() && name.startsWith(pathInJar)) { if (name.charAt(name.length() - 1) == '/') { - name = name.substring( - pathInJar.length(), name.length() - 1); + name = name.substring(pathInJar.length(), name.length() - 1); } else { name = name.substring(pathInJar.length()); } @@ -102,10 +99,9 @@ public abstract class AbstractArchiveResourceSet extends AbstractResourceSet { if (webAppMount.startsWith(path)) { int i = webAppMount.indexOf('/', path.length()); if (i == -1) { - return new String[] {webAppMount.substring(path.length())}; + return new String[] { webAppMount.substring(path.length()) }; } else { - return new String[] { - webAppMount.substring(path.length(), i)}; + return new String[] { webAppMount.substring(path.length(), i) }; } } } @@ -119,8 +115,7 @@ public abstract class AbstractArchiveResourceSet extends AbstractResourceSet { ResourceSet<String> result = new ResourceSet<>(); if (path.startsWith(webAppMount)) { - String pathInJar = - getInternalPath() + path.substring(webAppMount.length()); + String pathInJar = getInternalPath() + path.substring(webAppMount.length()); // Always strip off the leading '/' to get the JAR path and make // sure it ends in '/' if (pathInJar.length() > 0) { @@ -160,25 +155,21 @@ public abstract class AbstractArchiveResourceSet extends AbstractResourceSet { /** - * Obtain the map of entries in the archive. May return null in which case - * {@link #getArchiveEntry(String)} should be used. + * Obtain the map of entries in the archive. May return null in which case {@link #getArchiveEntry(String)} should + * be used. * - * @param single Is this request being make to support a single lookup? If - * false, a map will always be returned. If true, - * implementations may use this as a hint in determining the - * optimum way to respond. + * @param single Is this request being make to support a single lookup? If false, a map will always be returned. If + * true, implementations may use this as a hint in determining the optimum way to respond. * - * @return The archives entries mapped to their names or null if - * {@link #getArchiveEntry(String)} should be used. + * @return The archives entries mapped to their names or null if {@link #getArchiveEntry(String)} should be used. */ - protected abstract Map<String,JarEntry> getArchiveEntries(boolean single); + protected abstract Map<String, JarEntry> getArchiveEntries(boolean single); /** - * Obtain a single entry from the archive. For performance reasons, - * {@link #getArchiveEntries(boolean)} should always be called first and the - * archive entry looked up in the map if one is returned. Only if that call - * returns null should this method be used. + * Obtain a single entry from the archive. For performance reasons, {@link #getArchiveEntries(boolean)} should + * always be called first and the archive entry looked up in the map if one is returned. Only if that call returns + * null should this method be used. * * @param pathInArchive The path in the archive of the entry required * @@ -198,8 +189,7 @@ public abstract class AbstractArchiveResourceSet extends AbstractResourceSet { checkPath(path); if (is == null) { - throw new NullPointerException( - sm.getString("dirResourceSet.writeNpe")); + throw new NullPointerException(sm.getString("dirResourceSet.writeNpe")); } return false; @@ -212,8 +202,8 @@ public abstract class AbstractArchiveResourceSet extends AbstractResourceSet { WebResourceRoot root = getRoot(); /* - * If jarContents reports that this resource definitely does not contain - * the path, we can end this method and move on to the next jar. + * If jarContents reports that this resource definitely does not contain the path, we can end this method and + * move on to the next jar. */ if (jarContents != null && !jarContents.mightContainResource(path, webAppMount)) { return new EmptyResource(root, path); @@ -224,22 +214,18 @@ public abstract class AbstractArchiveResourceSet extends AbstractResourceSet { * * The path parameter passed into this method always starts with '/'. * - * The path parameter passed into this method may or may not end with a - * '/'. JarFile.getEntry() will return a matching directory entry - * whether or not the name ends in a '/'. However, if the entry is - * requested without the '/' subsequent calls to JarEntry.isDirectory() - * will return false. + * The path parameter passed into this method may or may not end with a '/'. JarFile.getEntry() will return a + * matching directory entry whether or not the name ends in a '/'. However, if the entry is requested without + * the '/' subsequent calls to JarEntry.isDirectory() will return false. * - * Paths in JARs never start with '/'. Leading '/' need to be removed - * before any JarFile.getEntry() call. + * Paths in JARs never start with '/'. Leading '/' need to be removed before any JarFile.getEntry() call. */ // If the JAR has been mounted below the web application root, return // an empty resource for requests outside of the mount point. if (path.startsWith(webAppMount)) { - String pathInJar = getInternalPath() + path.substring( - webAppMount.length()); + String pathInJar = getInternalPath() + path.substring(webAppMount.length()); // Always strip off the leading '/' to get the JAR path if (pathInJar.length() > 0 && pathInJar.charAt(0) == '/') { pathInJar = pathInJar.substring(1); @@ -250,15 +236,14 @@ public abstract class AbstractArchiveResourceSet extends AbstractResourceSet { if (!path.endsWith("/")) { path = path + "/"; } - return new JarResourceRoot(root, new File(getBase()), - baseUrlString, path); + return new JarResourceRoot(root, new File(getBase()), baseUrlString, path); } else { JarEntry jarEntry = null; if (isMultiRelease()) { // Calls JarFile.getJarEntry() which is multi-release aware jarEntry = getArchiveEntry(pathInJar); } else { - Map<String,JarEntry> jarEntries = getArchiveEntries(true); + Map<String, JarEntry> jarEntries = getArchiveEntries(true); if (!(pathInJar.charAt(pathInJar.length() - 1) == '/')) { if (jarEntries == null) { jarEntry = getArchiveEntry(pathInJar + '/'); @@ -290,8 +275,7 @@ public abstract class AbstractArchiveResourceSet extends AbstractResourceSet { protected abstract boolean isMultiRelease(); - protected abstract WebResource createArchiveResource(JarEntry jarEntry, - String webAppPath, Manifest manifest); + protected abstract WebResource createArchiveResource(JarEntry jarEntry, String webAppPath, Manifest manifest); @Override public final boolean isReadOnly() { @@ -305,8 +289,7 @@ public abstract class AbstractArchiveResourceSet extends AbstractResourceSet { return; } - throw new IllegalArgumentException( - sm.getString("abstractArchiveResourceSet.setReadOnlyFalse")); + throw new IllegalArgumentException(sm.getString("abstractArchiveResourceSet.setReadOnlyFalse")); } @SuppressWarnings("deprecation") diff --git a/java/org/apache/catalina/webresources/AbstractFileResourceSet.java b/java/org/apache/catalina/webresources/AbstractFileResourceSet.java index 153fae819b..e910e65118 100644 --- a/java/org/apache/catalina/webresources/AbstractFileResourceSet.java +++ b/java/org/apache/catalina/webresources/AbstractFileResourceSet.java @@ -146,10 +146,9 @@ public abstract class AbstractFileResourceSet extends AbstractResourceSet { protected void logIgnoredSymlink(String contextPath, String absPath, String canPath) { - String msg = sm.getString("abstractFileResourceSet.canonicalfileCheckFailed", - contextPath, absPath, canPath); + String msg = sm.getString("abstractFileResourceSet.canonicalfileCheckFailed", contextPath, absPath, canPath); // Log issues with configuration files at a higher level - if(absPath.startsWith("/META-INF/") || absPath.startsWith("/WEB-INF/")) { + if (absPath.startsWith("/META-INF/") || absPath.startsWith("/WEB-INF/")) { log.error(msg); } else { log.warn(msg); @@ -170,8 +169,8 @@ public abstract class AbstractFileResourceSet extends AbstractResourceSet { // there are known problems for file names with these characters // when using File#getCanonicalPath(). // Note: There are additional characters that are disallowed in - // Windows file names but these are not known to cause - // problems when using File#getCanonicalPath(). + // Windows file names but these are not known to cause + // problems when using File#getCanonicalPath(). return true; } } @@ -179,7 +178,7 @@ public abstract class AbstractFileResourceSet extends AbstractResourceSet { // level APIs are used to create the files that bypass various checks. // File names that end in ' ' are known to cause problems when using // File#getCanonicalPath(). - if (name.charAt(len -1) == ' ') { + if (name.charAt(len - 1) == ' ') { return true; } return false; @@ -187,11 +186,9 @@ public abstract class AbstractFileResourceSet extends AbstractResourceSet { /** - * Return a context-relative path, beginning with a "/", that represents - * the canonical version of the specified path after ".." and "." elements - * are resolved out. If the specified path attempts to go outside the - * boundaries of the current context (i.e. too many ".." path elements - * are present), return <code>null</code> instead. + * Return a context-relative path, beginning with a "/", that represents the canonical version of the specified path + * after ".." and "." elements are resolved out. If the specified path attempts to go outside the boundaries of the + * current context (i.e. too many ".." path elements are present), return <code>null</code> instead. * * @param path Path to be normalized */ @@ -219,7 +216,7 @@ public abstract class AbstractFileResourceSet extends AbstractResourceSet { } - //-------------------------------------------------------- Lifecycle methods + // -------------------------------------------------------- Lifecycle methods @Override protected void initInternal() throws LifecycleException { diff --git a/java/org/apache/catalina/webresources/AbstractResource.java b/java/org/apache/catalina/webresources/AbstractResource.java index ad6e8b2447..384c327321 100644 --- a/java/org/apache/catalina/webresources/AbstractResource.java +++ b/java/org/apache/catalina/webresources/AbstractResource.java @@ -67,8 +67,7 @@ public abstract class AbstractResource implements WebResource { long contentLength = getContentLength(); long lastModified = getLastModified(); if ((contentLength >= 0) || (lastModified >= 0)) { - weakETag = "W/\"" + contentLength + "-" + - lastModified + "\""; + weakETag = "W/\"" + contentLength + "-" + lastModified + "\""; } } } diff --git a/java/org/apache/catalina/webresources/AbstractResourceSet.java b/java/org/apache/catalina/webresources/AbstractResourceSet.java index 83c7b4710e..f139339848 100644 --- a/java/org/apache/catalina/webresources/AbstractResourceSet.java +++ b/java/org/apache/catalina/webresources/AbstractResourceSet.java @@ -25,8 +25,7 @@ import org.apache.catalina.WebResourceSet; import org.apache.catalina.util.LifecycleBase; import org.apache.tomcat.util.res.StringManager; -public abstract class AbstractResourceSet extends LifecycleBase - implements WebResourceSet { +public abstract class AbstractResourceSet extends LifecycleBase implements WebResourceSet { private WebResourceRoot root; private String base; @@ -42,8 +41,7 @@ public abstract class AbstractResourceSet extends LifecycleBase protected final void checkPath(String path) { if (path == null || path.length() == 0 || path.charAt(0) != '/') { - throw new IllegalArgumentException( - sm.getString("abstractResourceSet.checkPath", path)); + throw new IllegalArgumentException(sm.getString("abstractResourceSet.checkPath", path)); } } @@ -122,7 +120,7 @@ public abstract class AbstractResourceSet extends LifecycleBase } - //-------------------------------------------------------- Lifecycle methods + // -------------------------------------------------------- Lifecycle methods @Override protected final void startInternal() throws LifecycleException { setState(LifecycleState.STARTING); diff --git a/java/org/apache/catalina/webresources/AbstractSingleArchiveResource.java b/java/org/apache/catalina/webresources/AbstractSingleArchiveResource.java index ee9b686ee1..cd22d284be 100644 --- a/java/org/apache/catalina/webresources/AbstractSingleArchiveResource.java +++ b/java/org/apache/catalina/webresources/AbstractSingleArchiveResource.java @@ -40,8 +40,8 @@ public abstract class AbstractSingleArchiveResource extends AbstractArchiveResou return new JarInputStreamWrapper(jarEntry, is); } catch (IOException e) { if (getLog().isDebugEnabled()) { - getLog().debug(sm.getString("jarResource.getInputStreamFail", - getResource().getName(), getBaseUrl()), e); + getLog().debug(sm.getString("jarResource.getInputStreamFail", getResource().getName(), getBaseUrl()), + e); } if (jarFile != null) { getArchiveResourceSet().closeJarFile(); diff --git a/java/org/apache/catalina/webresources/AbstractSingleArchiveResourceSet.java b/java/org/apache/catalina/webresources/AbstractSingleArchiveResourceSet.java index 107607c11a..13efaa3c2e 100644 --- a/java/org/apache/catalina/webresources/AbstractSingleArchiveResourceSet.java +++ b/java/org/apache/catalina/webresources/AbstractSingleArchiveResourceSet.java @@ -31,8 +31,7 @@ import org.apache.tomcat.util.buf.UriUtil; import org.apache.tomcat.util.compat.JreCompat; /** - * Base class for a {@link org.apache.catalina.WebResourceSet} based on a - * single, rather than nested, archive. + * Base class for a {@link org.apache.catalina.WebResourceSet} based on a single, rather than nested, archive. */ public abstract class AbstractSingleArchiveResourceSet extends AbstractArchiveResourceSet { @@ -45,8 +44,8 @@ public abstract class AbstractSingleArchiveResourceSet extends AbstractArchiveRe } - public AbstractSingleArchiveResourceSet(WebResourceRoot root, String webAppMount, String base, - String internalPath) throws IllegalArgumentException { + public AbstractSingleArchiveResourceSet(WebResourceRoot root, String webAppMount, String base, String internalPath) + throws IllegalArgumentException { setRoot(root); setWebAppMount(webAppMount); setBase(base); @@ -63,7 +62,7 @@ public abstract class AbstractSingleArchiveResourceSet extends AbstractArchiveRe @Override - protected Map<String,JarEntry> getArchiveEntries(boolean single) { + protected Map<String, JarEntry> getArchiveEntries(boolean single) { synchronized (archiveLock) { if (archiveEntries == null && !single) { JarFile jarFile = null; @@ -115,8 +114,7 @@ public abstract class AbstractSingleArchiveResourceSet extends AbstractArchiveRe JarFile jarFile = null; try { jarFile = openJarFile(); - multiRelease = Boolean.valueOf( - JreCompat.getInstance().jarFileIsMultiRelease(jarFile)); + multiRelease = Boolean.valueOf(JreCompat.getInstance().jarFileIsMultiRelease(jarFile)); } catch (IOException ioe) { // Should never happen throw new IllegalStateException(ioe); @@ -133,7 +131,7 @@ public abstract class AbstractSingleArchiveResourceSet extends AbstractArchiveRe } - //-------------------------------------------------------- Lifecycle methods + // -------------------------------------------------------- Lifecycle methods @Override protected void initInternal() throws LifecycleException { diff --git a/java/org/apache/catalina/webresources/Cache.java b/java/org/apache/catalina/webresources/Cache.java index 287134e310..949117f521 100644 --- a/java/org/apache/catalina/webresources/Cache.java +++ b/java/org/apache/catalina/webresources/Cache.java @@ -45,14 +45,13 @@ public class Cache { private long ttl = 5000; private long maxSize = 10 * 1024 * 1024; - private int objectMaxSize = (int) maxSize/OBJECT_MAX_SIZE_FACTOR; + private int objectMaxSize = (int) maxSize / OBJECT_MAX_SIZE_FACTOR; private CacheStrategy cacheStrategy; private AtomicLong lookupCount = new AtomicLong(0); private AtomicLong hitCount = new AtomicLong(0); - private final ConcurrentMap<String,CachedResource> resourceCache = - new ConcurrentHashMap<>(); + private final ConcurrentMap<String, CachedResource> resourceCache = new ConcurrentHashMap<>(); public Cache(StandardRoot root) { this.root = root; @@ -83,8 +82,8 @@ public class Cache { if (cacheEntry == null) { // Local copy to ensure consistency int objectMaxSizeBytes = getObjectMaxSizeBytes(); - CachedResource newCacheEntry = new CachedResource(this, root, path, getTtl(), - objectMaxSizeBytes, useClassLoaderResources); + CachedResource newCacheEntry = new CachedResource(this, root, path, getTtl(), objectMaxSizeBytes, + useClassLoaderResources); // Concurrent callers will end up with the same CachedResource // instance @@ -127,12 +126,12 @@ public class Cache { // that isn't added to the cache. // There are assumptions here. They are: // - refactoring the Cache to use a combined key of - // path+useClassLoaderResources adds unnecessary - // complexity + // path+useClassLoaderResources adds unnecessary + // complexity // - the race condition is rare (over the lifetime of an - // application) + // application) // - it would be rare for an application to need to cache a - // resource for both values of useClassLoaderResources + // resource for both values of useClassLoaderResources cacheEntry = newCacheEntry; } // Make sure it is validated @@ -161,8 +160,8 @@ public class Cache { if (cacheEntry == null) { // Local copy to ensure consistency int objectMaxSizeBytes = getObjectMaxSizeBytes(); - CachedResource newCacheEntry = new CachedResource(this, root, path, getTtl(), - objectMaxSizeBytes, useClassLoaderResources); + CachedResource newCacheEntry = new CachedResource(this, root, path, getTtl(), objectMaxSizeBytes, + useClassLoaderResources); // Concurrent callers will end up with the same CachedResource // instance @@ -207,30 +206,25 @@ public class Cache { // Create an ordered set of all cached resources with the least recently // used first. This is a background process so we can afford to take the // time to order the elements first - TreeSet<CachedResource> orderedResources = - new TreeSet<>(Comparator.comparingLong(CachedResource::getNextCheck).reversed()); + TreeSet<CachedResource> orderedResources = new TreeSet<>( + Comparator.comparingLong(CachedResource::getNextCheck).reversed()); orderedResources.addAll(resourceCache.values()); Iterator<CachedResource> iter = orderedResources.iterator(); - long targetSize = - maxSize * (100 - TARGET_FREE_PERCENT_BACKGROUND) / 100; + long targetSize = maxSize * (100 - TARGET_FREE_PERCENT_BACKGROUND) / 100; long newSize = evict(targetSize, iter); if (newSize > targetSize) { - log.info(sm.getString("cache.backgroundEvictFail", - Long.valueOf(TARGET_FREE_PERCENT_BACKGROUND), - root.getContext().getName(), - Long.valueOf(newSize / 1024))); + log.info(sm.getString("cache.backgroundEvictFail", Long.valueOf(TARGET_FREE_PERCENT_BACKGROUND), + root.getContext().getName(), Long.valueOf(newSize / 1024))); } } private boolean noCache(String path) { // Don't cache classes. The class loader handles this. // Don't cache JARs. The ResourceSet handles this. - if ((path.endsWith(".class") && - (path.startsWith("/WEB-INF/classes/") || path.startsWith("/WEB-INF/lib/"))) - || + if ((path.endsWith(".class") && (path.startsWith("/WEB-INF/classes/") || path.startsWith("/WEB-INF/lib/"))) || (path.startsWith("/WEB-INF/lib/") && path.endsWith(".jar"))) { return true; } @@ -328,8 +322,8 @@ public class Cache { return; } if (objectMaxSize > limit) { - log.warn(sm.getString("cache.objectMaxSizeTooBig", - Integer.valueOf(objectMaxSize / 1024), Integer.valueOf((int)limit / 1024))); + log.warn(sm.getString("cache.objectMaxSizeTooBig", Integer.valueOf(objectMaxSize / 1024), + Integer.valueOf((int) limit / 1024))); objectMaxSize = (int) limit; } } diff --git a/java/org/apache/catalina/webresources/CachedResource.java b/java/org/apache/catalina/webresources/CachedResource.java index 516effdeff..649d2054c0 100644 --- a/java/org/apache/catalina/webresources/CachedResource.java +++ b/java/org/apache/catalina/webresources/CachedResource.java @@ -43,9 +43,8 @@ import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.res.StringManager; /** - * This class is designed to wrap a 'raw' WebResource and providing caching for - * expensive operations. Inexpensive operations may be passed through to the - * underlying resource. + * This class is designed to wrap a 'raw' WebResource and providing caching for expensive operations. Inexpensive + * operations may be passed through to the underlying resource. */ public class CachedResource implements WebResource { @@ -77,8 +76,8 @@ public class CachedResource implements WebResource { private volatile Long cachedContentLength = null; - public CachedResource(Cache cache, StandardRoot root, String path, long ttl, - int objectMaxSizeBytes, boolean usesClassLoaderResources) { + public CachedResource(Cache cache, StandardRoot root, String path, long ttl, int objectMaxSizeBytes, + boolean usesClassLoaderResources) { this.cache = cache; this.root = root; this.webAppPath = path; @@ -104,8 +103,7 @@ public class CachedResource implements WebResource { if (webResource == null) { synchronized (this) { if (webResource == null) { - webResource = root.getResourceInternal( - webAppPath, useClassLoaderResources); + webResource = root.getResourceInternal(webAppPath, useClassLoaderResources); getLastModified(); getContentLength(); nextCheck = ttl + now; @@ -127,8 +125,7 @@ public class CachedResource implements WebResource { // Assume resources inside WARs will not change if (!root.isPackedWarFile()) { - WebResource webResourceInternal = root.getResourceInternal( - webAppPath, useClassLoaderResources); + WebResource webResourceInternal = root.getResourceInternal(webAppPath, useClassLoaderResources); if (!webResource.exists() && webResourceInternal.exists()) { return false; } @@ -157,8 +154,7 @@ public class CachedResource implements WebResource { if (webResources == null) { synchronized (this) { if (webResources == null) { - webResources = root.getResourcesInternal( - webAppPath, useClassLoaderResources); + webResources = root.getResourcesInternal(webAppPath, useClassLoaderResources); nextCheck = ttl + now; return true; } @@ -318,40 +314,30 @@ public class CachedResource implements WebResource { @Override public URL getURL() { /* - * We don't want applications using this URL to access the resource - * directly as that could lead to inconsistent results when the resource - * is updated on the file system but the cache entry has not yet - * expired. We saw this, for example, in JSP compilation. - * - last modified time was obtained via - * ServletContext.getResource("path").openConnection().getLastModified() - * - JSP content was obtained via - * ServletContext.getResourceAsStream("path") - * The result was that the JSP modification was detected but the JSP - * content was read from the cache so the non-updated JSP page was - * used to generate the .java and .class file + * We don't want applications using this URL to access the resource directly as that could lead to inconsistent + * results when the resource is updated on the file system but the cache entry has not yet expired. We saw this, + * for example, in JSP compilation. - last modified time was obtained via + * ServletContext.getResource("path").openConnection().getLastModified() - JSP content was obtained via + * ServletContext.getResourceAsStream("path") The result was that the JSP modification was detected but the JSP + * content was read from the cache so the non-updated JSP page was used to generate the .java and .class file * - * One option to resolve this issue is to use a custom URL scheme for - * resource URLs. This would allow us, via registration of a - * URLStreamHandlerFactory, to control how the resources are accessed - * and ensure that all access go via the cache We took this approach for - * war: URLs so we can use jar:war:file: URLs to reference resources in - * unpacked WAR files. However, because URL.setURLStreamHandlerFactory() - * may only be caused once, this can cause problems when using other - * libraries that also want to use a custom URL scheme. + * One option to resolve this issue is to use a custom URL scheme for resource URLs. This would allow us, via + * registration of a URLStreamHandlerFactory, to control how the resources are accessed and ensure that all + * access go via the cache We took this approach for war: URLs so we can use jar:war:file: URLs to reference + * resources in unpacked WAR files. However, because URL.setURLStreamHandlerFactory() may only be caused once, + * this can cause problems when using other libraries that also want to use a custom URL scheme. * - * The approach below allows us to insert a custom URLStreamHandler - * without registering a custom protocol. The only limitation (compared - * to registering a custom protocol) is that if the application - * constructs the same URL from a String, they will access the resource - * directly and not via the cache. + * The approach below allows us to insert a custom URLStreamHandler without registering a custom protocol. The + * only limitation (compared to registering a custom protocol) is that if the application constructs the same + * URL from a String, they will access the resource directly and not via the cache. */ URL resourceURL = webResource.getURL(); if (resourceURL == null) { return null; } try { - CachedResourceURLStreamHandler handler = - new CachedResourceURLStreamHandler(resourceURL, root, webAppPath, usesClassLoaderResources); + CachedResourceURLStreamHandler handler = new CachedResourceURLStreamHandler(resourceURL, root, webAppPath, + usesClassLoaderResources); URL result = new URL(null, resourceURL.toExternalForm(), handler); handler.setAssociatedURL(result); return result; @@ -411,8 +397,7 @@ public class CachedResource implements WebResource { /* - * Mimics the behaviour of FileURLConnection.getInputStream for a directory. - * Deliberately uses default locale. + * Mimics the behaviour of FileURLConnection.getInputStream for a directory. Deliberately uses default locale. */ private static InputStream buildInputStream(String[] files) { Arrays.sort(files, Collator.getInstance(Locale.getDefault())); diff --git a/java/org/apache/catalina/webresources/ClasspathURLStreamHandler.java b/java/org/apache/catalina/webresources/ClasspathURLStreamHandler.java index 9a9100c554..daab855b3e 100644 --- a/java/org/apache/catalina/webresources/ClasspathURLStreamHandler.java +++ b/java/org/apache/catalina/webresources/ClasspathURLStreamHandler.java @@ -26,8 +26,7 @@ import org.apache.tomcat.util.res.StringManager; public class ClasspathURLStreamHandler extends URLStreamHandler { - private static final StringManager sm = - StringManager.getManager(ClasspathURLStreamHandler.class); + private static final StringManager sm = StringManager.getManager(ClasspathURLStreamHandler.class); @Override diff --git a/java/org/apache/catalina/webresources/DirResourceSet.java b/java/org/apache/catalina/webresources/DirResourceSet.java index eed886a364..3bd0245f0a 100644 --- a/java/org/apache/catalina/webresources/DirResourceSet.java +++ b/java/org/apache/catalina/webresources/DirResourceSet.java @@ -48,25 +48,19 @@ public class DirResourceSet extends AbstractFileResourceSet { } /** - * Creates a new {@link org.apache.catalina.WebResourceSet} based on a - * directory. + * Creates a new {@link org.apache.catalina.WebResourceSet} based on a directory. * - * @param root The {@link WebResourceRoot} this new - * {@link org.apache.catalina.WebResourceSet} will - * be added to. - * @param webAppMount The path within the web application at which this - * {@link org.apache.catalina.WebResourceSet} will - * be mounted. For example, to add a directory of - * JARs to a web application, the directory would - * be mounted at "/WEB-INF/lib/" - * @param base The absolute path to the directory on the file - * system from which the resources will be served. - * @param internalPath The path within this new {@link - * org.apache.catalina.WebResourceSet} where - * resources will be served from. + * @param root The {@link WebResourceRoot} this new {@link org.apache.catalina.WebResourceSet} will be added + * to. + * @param webAppMount The path within the web application at which this {@link org.apache.catalina.WebResourceSet} + * will be mounted. For example, to add a directory of JARs to a web application, the + * directory would be mounted at "/WEB-INF/lib/" + * @param base The absolute path to the directory on the file system from which the resources will be + * served. + * @param internalPath The path within this new {@link org.apache.catalina.WebResourceSet} where resources will be + * served from. */ - public DirResourceSet(WebResourceRoot root, String webAppMount, String base, - String internalPath) { + public DirResourceSet(WebResourceRoot root, String webAppMount, String base, String internalPath) { super(internalPath); setRoot(root); setWebAppMount(webAppMount); @@ -77,8 +71,7 @@ public class DirResourceSet extends AbstractFileResourceSet { f = new File(f, "/WEB-INF/classes/META-INF/resources"); if (f.isDirectory()) { - root.createWebResourceSet(ResourceSetType.RESOURCE_JAR, "/", - f.getAbsolutePath(), null, "/"); + root.createWebResourceSet(ResourceSetType.RESOURCE_JAR, "/", f.getAbsolutePath(), null, "/"); } } @@ -136,10 +129,9 @@ public class DirResourceSet extends AbstractFileResourceSet { if (webAppMount.startsWith(path)) { int i = webAppMount.indexOf('/', path.length()); if (i == -1) { - return new String[] {webAppMount.substring(path.length())}; + return new String[] { webAppMount.substring(path.length()) }; } else { - return new String[] { - webAppMount.substring(path.length(), i)}; + return new String[] { webAppMount.substring(path.length(), i) }; } } return EMPTY_STRING_ARRAY; @@ -239,8 +231,7 @@ public class DirResourceSet extends AbstractFileResourceSet { checkPath(path); if (is == null) { - throw new NullPointerException( - sm.getString("dirResourceSet.writeNpe")); + throw new NullPointerException(sm.getString("dirResourceSet.writeNpe")); } if (isReadOnly()) { @@ -284,12 +275,12 @@ public class DirResourceSet extends AbstractFileResourceSet { @Override protected void checkType(File file) { if (file.isDirectory() == false) { - throw new IllegalArgumentException(sm.getString("dirResourceSet.notDirectory", - getBase(), File.separator, getInternalPath())); + throw new IllegalArgumentException( + sm.getString("dirResourceSet.notDirectory", getBase(), File.separator, getInternalPath())); } } - //-------------------------------------------------------- Lifecycle methods + // -------------------------------------------------------- Lifecycle methods @Override protected void initInternal() throws LifecycleException { super.initInternal(); diff --git a/java/org/apache/catalina/webresources/EmptyResourceSet.java b/java/org/apache/catalina/webresources/EmptyResourceSet.java index 69f05e2ec5..c408feb1b7 100644 --- a/java/org/apache/catalina/webresources/EmptyResourceSet.java +++ b/java/org/apache/catalina/webresources/EmptyResourceSet.java @@ -29,10 +29,9 @@ import org.apache.catalina.WebResourceSet; import org.apache.catalina.util.LifecycleBase; /** - * A {@link WebResourceSet} implementation that is not backed by a file system - * and behaves as if it has no resources available. This is primarily used in - * embedded mode when the web application is configured entirely - * programmatically and does not use any static resources from the file system. + * A {@link WebResourceSet} implementation that is not backed by a file system and behaves as if it has no resources + * available. This is primarily used in embedded mode when the web application is configured entirely programmatically + * and does not use any static resources from the file system. */ public class EmptyResourceSet extends LifecycleBase implements WebResourceSet { @@ -134,8 +133,7 @@ public class EmptyResourceSet extends LifecycleBase implements WebResourceSet { /** * {@inheritDoc} * <p> - * Calls to this method will be ignored as this implementation always read - * only. + * Calls to this method will be ignored as this implementation always read only. */ @Override public void setReadOnly(boolean readOnly) { diff --git a/java/org/apache/catalina/webresources/ExtractingRoot.java b/java/org/apache/catalina/webresources/ExtractingRoot.java index 32448ad45b..8d28381aa5 100644 --- a/java/org/apache/catalina/webresources/ExtractingRoot.java +++ b/java/org/apache/catalina/webresources/ExtractingRoot.java @@ -31,8 +31,8 @@ import org.apache.catalina.util.IOTools; import org.apache.tomcat.util.res.StringManager; /** - * If the main resources are packaged as a WAR file then any JARs will be - * extracted to the work directory and used from there. + * If the main resources are packaged as a WAR file then any JARs will be extracted to the work directory and used from + * there. */ public class ExtractingRoot extends StandardRoot { @@ -53,8 +53,7 @@ public class ExtractingRoot extends StandardRoot { File expansionTarget = getExpansionTarget(); if (!expansionTarget.isDirectory()) { if (!expansionTarget.mkdirs()) { - throw new LifecycleException( - sm.getString("extractingRoot.targetFailed", expansionTarget)); + throw new LifecycleException(sm.getString("extractingRoot.targetFailed", expansionTarget)); } } @@ -66,15 +65,13 @@ public class ExtractingRoot extends StandardRoot { File dest = new File(expansionTarget, possibleJar.getName()); dest = dest.getCanonicalFile(); try (InputStream sourceStream = possibleJar.getInputStream(); - OutputStream destStream= new FileOutputStream(dest)) { + OutputStream destStream = new FileOutputStream(dest)) { IOTools.flow(sourceStream, destStream); } - createWebResourceSet(ResourceSetType.CLASSES_JAR, - "/WEB-INF/classes", dest.toURI().toURL(), "/"); + createWebResourceSet(ResourceSetType.CLASSES_JAR, "/WEB-INF/classes", dest.toURI().toURL(), "/"); } catch (IOException ioe) { - throw new LifecycleException( - sm.getString("extractingRoot.jarFailed", possibleJar.getName()), ioe); + throw new LifecycleException(sm.getString("extractingRoot.jarFailed", possibleJar.getName()), ioe); } } } diff --git a/java/org/apache/catalina/webresources/FileResource.java b/java/org/apache/catalina/webresources/FileResource.java index babe1905a7..e1ca5f8b37 100644 --- a/java/org/apache/catalina/webresources/FileResource.java +++ b/java/org/apache/catalina/webresources/FileResource.java @@ -35,8 +35,7 @@ import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; /** - * Represents a single resource (file or directory) that is located on a file - * system. + * Represents a single resource (file or directory) that is located on a file system. */ public class FileResource extends AbstractResource { @@ -63,9 +62,8 @@ public class FileResource extends AbstractResource { private final Manifest manifest; private final boolean needConvert; - public FileResource(WebResourceRoot root, String webAppPath, - File resource, boolean readOnly, Manifest manifest) { - super(root,webAppPath); + public FileResource(WebResourceRoot root, String webAppPath, File resource, boolean readOnly, Manifest manifest) { + super(root, webAppPath); this.resource = resource; if (webAppPath.charAt(webAppPath.length() - 1) == '/') { @@ -76,9 +74,7 @@ public class FileResource extends AbstractResource { // This is the root directory of a mounted ResourceSet // Need to return the mounted name, not the real name int endOfName = webAppPath.length() - 1; - name = webAppPath.substring( - webAppPath.lastIndexOf('/', endOfName - 1) + 1, - endOfName); + name = webAppPath.substring(webAppPath.lastIndexOf('/', endOfName - 1) + 1, endOfName); } } else { // Must be a file @@ -156,8 +152,7 @@ public class FileResource extends AbstractResource { return resource.getCanonicalPath(); } catch (IOException ioe) { if (log.isDebugEnabled()) { - log.debug(sm.getString("fileResource.getCanonicalPathFail", - resource.getPath()), ioe); + log.debug(sm.getString("fileResource.getCanonicalPathFail", resource.getPath()), ioe); } return null; } @@ -193,9 +188,8 @@ public class FileResource extends AbstractResource { if (len > Integer.MAX_VALUE) { // Can't create an array that big - throw new ArrayIndexOutOfBoundsException(sm.getString( - "abstractResource.getContentTooLarge", getWebappPath(), - Long.valueOf(len))); + throw new ArrayIndexOutOfBoundsException( + sm.getString("abstractResource.getContentTooLarge", getWebappPath(), Long.valueOf(len))); } if (len < 0) { @@ -217,8 +211,7 @@ public class FileResource extends AbstractResource { } } catch (IOException ioe) { if (getLog().isDebugEnabled()) { - getLog().debug(sm.getString("abstractResource.getContentFail", - getWebappPath()), ioe); + getLog().debug(sm.getString("abstractResource.getContentFail", getWebappPath()), ioe); } return null; } @@ -242,13 +235,11 @@ public class FileResource extends AbstractResource { @Override public long getCreation() { try { - BasicFileAttributes attrs = Files.readAttributes(resource.toPath(), - BasicFileAttributes.class); + BasicFileAttributes attrs = Files.readAttributes(resource.toPath(), BasicFileAttributes.class); return attrs.creationTime().toMillis(); } catch (IOException e) { if (log.isDebugEnabled()) { - log.debug(sm.getString("fileResource.getCreationFail", - resource.getPath()), e); + log.debug(sm.getString("fileResource.getCreationFail", resource.getPath()), e); } return 0; } @@ -261,8 +252,7 @@ public class FileResource extends AbstractResource { return resource.toURI().toURL(); } catch (MalformedURLException e) { if (log.isDebugEnabled()) { - log.debug(sm.getString("fileResource.getUrlFail", - resource.getPath()), e); + log.debug(sm.getString("fileResource.getUrlFail", resource.getPath()), e); } return null; } diff --git a/java/org/apache/catalina/webresources/FileResourceSet.java b/java/org/apache/catalina/webresources/FileResourceSet.java index bdc415fdf1..035e2f7a4e 100644 --- a/java/org/apache/catalina/webresources/FileResourceSet.java +++ b/java/org/apache/catalina/webresources/FileResourceSet.java @@ -26,8 +26,7 @@ import org.apache.catalina.WebResourceRoot; import org.apache.catalina.util.ResourceSet; /** - * Represents a {@link org.apache.catalina.WebResourceSet} based on a single - * file. + * Represents a {@link org.apache.catalina.WebResourceSet} based on a single file. */ public class FileResourceSet extends AbstractFileResourceSet { @@ -39,25 +38,18 @@ public class FileResourceSet extends AbstractFileResourceSet { } /** - * Creates a new {@link org.apache.catalina.WebResourceSet} based on a - * file. + * Creates a new {@link org.apache.catalina.WebResourceSet} based on a file. * - * @param root The {@link WebResourceRoot} this new - * {@link org.apache.catalina.WebResourceSet} will - * be added to. - * @param webAppMount The path within the web application at which this - * {@link org.apache.catalina.WebResourceSet} will - * be mounted. For example, to add a directory of - * JARs to a web application, the directory would - * be mounted at "WEB-INF/lib/" - * @param base The absolute path to the file on the file system - * from which the resource will be served. - * @param internalPath The path within this new {@link - * org.apache.catalina.WebResourceSet} where - * resources will be served from. + * @param root The {@link WebResourceRoot} this new {@link org.apache.catalina.WebResourceSet} will be added + * to. + * @param webAppMount The path within the web application at which this {@link org.apache.catalina.WebResourceSet} + * will be mounted. For example, to add a directory of JARs to a web application, the + * directory would be mounted at "WEB-INF/lib/" + * @param base The absolute path to the file on the file system from which the resource will be served. + * @param internalPath The path within this new {@link org.apache.catalina.WebResourceSet} where resources will be + * served from. */ - public FileResourceSet(WebResourceRoot root, String webAppMount, - String base, String internalPath) { + public FileResourceSet(WebResourceRoot root, String webAppMount, String base, String internalPath) { super(internalPath); setRoot(root); setWebAppMount(webAppMount); @@ -113,12 +105,12 @@ public class FileResourceSet extends AbstractFileResourceSet { if (webAppMount.startsWith(path)) { webAppMount = webAppMount.substring(path.length()); if (webAppMount.equals(getFileBase().getName())) { - return new String[] {getFileBase().getName()}; + return new String[] { getFileBase().getName() }; } else { // Virtual directory int i = webAppMount.indexOf('/'); if (i > 0) { - return new String[] {webAppMount.substring(0, i)}; + return new String[] { webAppMount.substring(0, i) }; } } } @@ -169,8 +161,8 @@ public class FileResourceSet extends AbstractFileResourceSet { @Override protected void checkType(File file) { if (file.isFile() == false) { - throw new IllegalArgumentException(sm.getString("fileResourceSet.notFile", - getBase(), File.separator, getInternalPath())); + throw new IllegalArgumentException( + sm.getString("fileResourceSet.notFile", getBase(), File.separator, getInternalPath())); } } } diff --git a/java/org/apache/catalina/webresources/JarContents.java b/java/org/apache/catalina/webresources/JarContents.java index 27180721a9..6ea65b0a59 100644 --- a/java/org/apache/catalina/webresources/JarContents.java +++ b/java/org/apache/catalina/webresources/JarContents.java @@ -22,12 +22,9 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; /** - * This class represents the contents of a jar by determining whether a given - * resource <b>might</b> be in the cache, based on a bloom filter. This is not a - * general-purpose bloom filter because it contains logic to strip out - * characters from the beginning of the key. - * - * The hash methods are simple but good enough for this purpose. + * This class represents the contents of a jar by determining whether a given resource <b>might</b> be in the cache, + * based on a bloom filter. This is not a general-purpose bloom filter because it contains logic to strip out characters + * from the beginning of the key. The hash methods are simple but good enough for this purpose. */ public final class JarContents { private final BitSet bits1; @@ -43,8 +40,7 @@ public final class JarContents { private static final int HASH_PRIME_2 = 17; /** - * Size of the fixed-length bit table. Larger reduces false positives, - * smaller saves memory. + * Size of the fixed-length bit table. Larger reduces false positives, smaller saves memory. */ private static final int TABLE_SIZE = 2048; @@ -91,13 +87,12 @@ public final class JarContents { } /** - * Simple hashcode of a portion of the string. Typically we would use - * substring, but memory and runtime speed are critical. + * Simple hashcode of a portion of the string. Typically we would use substring, but memory and runtime speed are + * critical. + * + * @param content Wrapping String. + * @param startPos First character in the range. * - * @param content - * Wrapping String. - * @param startPos - * First character in the range. * @return hashcode of the range. */ private int hashcode(String content, int startPos, int hashPrime) { @@ -105,7 +100,7 @@ public final class JarContents { } private int hashcode(String content, int startPos, int endPos, int hashPrime) { - int h = hashPrime/2; + int h = hashPrime / 2; for (int i = startPos; i < endPos; i++) { h = hashPrime * h + content.charAt(i); } @@ -118,14 +113,12 @@ public final class JarContents { /** - * Method that identifies whether a given path <b>MIGHT</b> be in this jar. - * Uses the Bloom filter mechanism. + * Method that identifies whether a given path <b>MIGHT</b> be in this jar. Uses the Bloom filter mechanism. + * + * @param path Requested path. Sometimes starts with "/WEB-INF/classes". + * @param webappRoot The value of the webapp location, which can be stripped from the path. Typically is + * "/WEB-INF/classes". * - * @param path - * Requested path. Sometimes starts with "/WEB-INF/classes". - * @param webappRoot - * The value of the webapp location, which can be stripped from - * the path. Typically is "/WEB-INF/classes". * @return Whether the prefix of the path is known to be in this jar. */ public final boolean mightContainResource(String path, String webappRoot) { diff --git a/java/org/apache/catalina/webresources/JarResource.java b/java/org/apache/catalina/webresources/JarResource.java index 23eb6d8d52..56199304ec 100644 --- a/java/org/apache/catalina/webresources/JarResource.java +++ b/java/org/apache/catalina/webresources/JarResource.java @@ -22,16 +22,15 @@ import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; /** - * Represents a single resource (file or directory) that is located within a - * JAR. + * Represents a single resource (file or directory) that is located within a JAR. */ public class JarResource extends AbstractSingleArchiveResource { private static final Log log = LogFactory.getLog(JarResource.class); - public JarResource(AbstractArchiveResourceSet archiveResourceSet, String webAppPath, - String baseUrl, JarEntry jarEntry) { + public JarResource(AbstractArchiveResourceSet archiveResourceSet, String webAppPath, String baseUrl, + JarEntry jarEntry) { super(archiveResourceSet, webAppPath, "jar:" + baseUrl + "!/", jarEntry, baseUrl); } diff --git a/java/org/apache/catalina/webresources/JarResourceRoot.java b/java/org/apache/catalina/webresources/JarResourceRoot.java index fc11a47b05..27686edf76 100644 --- a/java/org/apache/catalina/webresources/JarResourceRoot.java +++ b/java/org/apache/catalina/webresources/JarResourceRoot.java @@ -37,13 +37,11 @@ public class JarResourceRoot extends AbstractResource { private final String baseUrl; private final String name; - public JarResourceRoot(WebResourceRoot root, File base, String baseUrl, - String webAppPath) { + public JarResourceRoot(WebResourceRoot root, File base, String baseUrl, String webAppPath) { super(root, webAppPath); // Validate the webAppPath before going any further if (!webAppPath.endsWith("/")) { - throw new IllegalArgumentException(sm.getString( - "jarResourceRoot.invalidWebAppPath", webAppPath)); + throw new IllegalArgumentException(sm.getString("jarResourceRoot.invalidWebAppPath", webAppPath)); } this.base = base; this.baseUrl = "jar:" + baseUrl; @@ -146,6 +144,7 @@ public class JarResourceRoot extends AbstractResource { return null; } } + @Override protected Log getLog() { return log; diff --git a/java/org/apache/catalina/webresources/JarResourceSet.java b/java/org/apache/catalina/webresources/JarResourceSet.java index c39ac745e6..c6e8a095c0 100644 --- a/java/org/apache/catalina/webresources/JarResourceSet.java +++ b/java/org/apache/catalina/webresources/JarResourceSet.java @@ -35,34 +35,27 @@ public class JarResourceSet extends AbstractSingleArchiveResourceSet { /** - * Creates a new {@link org.apache.catalina.WebResourceSet} based on a JAR - * file. + * Creates a new {@link org.apache.catalina.WebResourceSet} based on a JAR file. * - * @param root The {@link WebResourceRoot} this new - * {@link org.apache.catalina.WebResourceSet} will - * be added to. - * @param webAppMount The path within the web application at which this - * {@link org.apache.catalina.WebResourceSet} will - * be mounted. - * @param base The absolute path to the JAR file on the file system - * from which the resources will be served. - * @param internalPath The path within this new {@link - * org.apache.catalina.WebResourceSet} where - * resources will be served from. E.g. for a - * resource JAR, this would be "META-INF/resources" + * @param root The {@link WebResourceRoot} this new {@link org.apache.catalina.WebResourceSet} will be added + * to. + * @param webAppMount The path within the web application at which this {@link org.apache.catalina.WebResourceSet} + * will be mounted. + * @param base The absolute path to the JAR file on the file system from which the resources will be served. + * @param internalPath The path within this new {@link org.apache.catalina.WebResourceSet} where resources will be + * served from. E.g. for a resource JAR, this would be "META-INF/resources" * - * @throws IllegalArgumentException if the webAppMount or internalPath is - * not valid (valid paths must start with '/') + * @throws IllegalArgumentException if the webAppMount or internalPath is not valid (valid paths must start with + * '/') */ - public JarResourceSet(WebResourceRoot root, String webAppMount, String base, - String internalPath) throws IllegalArgumentException { + public JarResourceSet(WebResourceRoot root, String webAppMount, String base, String internalPath) + throws IllegalArgumentException { super(root, webAppMount, base, internalPath); } @Override - protected WebResource createArchiveResource(JarEntry jarEntry, - String webAppPath, Manifest manifest) { + protected WebResource createArchiveResource(JarEntry jarEntry, String webAppPath, Manifest manifest) { return new JarResource(this, webAppPath, getBaseUrlString(), jarEntry); } } diff --git a/java/org/apache/catalina/webresources/JarWarResource.java b/java/org/apache/catalina/webresources/JarWarResource.java index cce12338a8..dcefd22213 100644 --- a/java/org/apache/catalina/webresources/JarWarResource.java +++ b/java/org/apache/catalina/webresources/JarWarResource.java @@ -27,8 +27,7 @@ import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.buf.UriUtil; /** - * Represents a single resource (file or directory) that is located within a - * JAR that in turn is located in a WAR file. + * Represents a single resource (file or directory) that is located within a JAR that in turn is located in a WAR file. */ public class JarWarResource extends AbstractArchiveResource { @@ -36,11 +35,10 @@ public class JarWarResource extends AbstractArchiveResource { private final String archivePath; - public JarWarResource(AbstractArchiveResourceSet archiveResourceSet, String webAppPath, - String baseUrl, JarEntry jarEntry, String archivePath) { + public JarWarResource(AbstractArchiveResourceSet archiveResourceSet, String webAppPath, String baseUrl, + JarEntry jarEntry, String archivePath) { - super(archiveResourceSet, webAppPath, - "jar:war:" + baseUrl + UriUtil.getWarSeparator() + archivePath + "!/", + super(archiveResourceSet, webAppPath, "jar:war:" + baseUrl + UriUtil.getWarSeparator() + archivePath + "!/", jarEntry, "war:" + baseUrl + UriUtil.getWarSeparator() + archivePath); this.archivePath = archivePath; } @@ -57,8 +55,7 @@ public class JarWarResource extends AbstractArchiveResource { jarIs = new JarInputStream(isInWar); entry = jarIs.getNextJarEntry(); - while (entry != null && - !entry.getName().equals(getResource().getName())) { + while (entry != null && !entry.getName().equals(getResource().getName())) { entry = jarIs.getNextJarEntry(); } @@ -69,8 +66,7 @@ public class JarWarResource extends AbstractArchiveResource { return new JarInputStreamWrapper(entry, jarIs); } catch (IOException e) { if (log.isDebugEnabled()) { - log.debug(sm.getString("jarResource.getInputStreamFail", - getResource().getName(), getBaseUrl()), e); + log.debug(sm.getString("jarResource.getInputStreamFail", getResource().getName(), getBaseUrl()), e); } // Ensure jarIs is closed if there is an exception entry = null; diff --git a/java/org/apache/catalina/webresources/JarWarResourceSet.java b/java/org/apache/catalina/webresources/JarWarResourceSet.java index a5a709fd2d..5fd2e00890 100644 --- a/java/org/apache/catalina/webresources/JarWarResourceSet.java +++ b/java/org/apache/catalina/webresources/JarWarResourceSet.java @@ -36,39 +36,30 @@ import org.apache.tomcat.util.buf.UriUtil; import org.apache.tomcat.util.compat.JreCompat; /** - * Represents a {@link org.apache.catalina.WebResourceSet} based on a JAR file - * that is nested inside a packed WAR file. This is only intended for internal - * use within Tomcat and therefore cannot be created via configuration. + * Represents a {@link org.apache.catalina.WebResourceSet} based on a JAR file that is nested inside a packed WAR file. + * This is only intended for internal use within Tomcat and therefore cannot be created via configuration. */ public class JarWarResourceSet extends AbstractArchiveResourceSet { private final String archivePath; /** - * Creates a new {@link org.apache.catalina.WebResourceSet} based on a JAR - * file that is nested inside a WAR. + * Creates a new {@link org.apache.catalina.WebResourceSet} based on a JAR file that is nested inside a WAR. * - * @param root The {@link WebResourceRoot} this new - * {@link org.apache.catalina.WebResourceSet} will - * be added to. - * @param webAppMount The path within the web application at which this - * {@link org.apache.catalina.WebResourceSet} will - * be mounted. - * @param base The absolute path to the WAR file on the file system - * in which the JAR is located. - * @param archivePath The path within the WAR file where the JAR file is - * located. - * @param internalPath The path within this new {@link - * org.apache.catalina.WebResourceSet} where - * resources will be served from. E.g. for a - * resource JAR, this would be "META-INF/resources" + * @param root The {@link WebResourceRoot} this new {@link org.apache.catalina.WebResourceSet} will be added + * to. + * @param webAppMount The path within the web application at which this {@link org.apache.catalina.WebResourceSet} + * will be mounted. + * @param base The absolute path to the WAR file on the file system in which the JAR is located. + * @param archivePath The path within the WAR file where the JAR file is located. + * @param internalPath The path within this new {@link org.apache.catalina.WebResourceSet} where resources will be + * served from. E.g. for a resource JAR, this would be "META-INF/resources" * - * @throws IllegalArgumentException if the webAppMount or internalPath is - * not valid (valid paths must start with '/') + * @throws IllegalArgumentException if the webAppMount or internalPath is not valid (valid paths must start with + * '/') */ - public JarWarResourceSet(WebResourceRoot root, String webAppMount, - String base, String archivePath, String internalPath) - throws IllegalArgumentException { + public JarWarResourceSet(WebResourceRoot root, String webAppMount, String base, String archivePath, + String internalPath) throws IllegalArgumentException { setRoot(root); setWebAppMount(webAppMount); setBase(base); @@ -85,8 +76,7 @@ public class JarWarResourceSet extends AbstractArchiveResourceSet { } @Override - protected WebResource createArchiveResource(JarEntry jarEntry, - String webAppPath, Manifest manifest) { + protected WebResource createArchiveResource(JarEntry jarEntry, String webAppPath, Manifest manifest) { return new JarWarResource(this, webAppPath, getBaseUrlString(), jarEntry, archivePath); } @@ -94,11 +84,10 @@ public class JarWarResourceSet extends AbstractArchiveResourceSet { /** * {@inheritDoc} * <p> - * JarWar can't optimise for a single resource so the Map is always - * returned. + * JarWar can't optimise for a single resource so the Map is always returned. */ @Override - protected Map<String,JarEntry> getArchiveEntries(boolean single) { + protected Map<String, JarEntry> getArchiveEntries(boolean single) { synchronized (archiveLock) { if (archiveEntries == null) { JarFile warFile = null; @@ -168,10 +157,10 @@ public class JarWarResourceSet extends AbstractArchiveResourceSet { int targetVersion = JreCompat.getInstance().jarFileRuntimeMajorVersion(); - Map<String,VersionedJarEntry> versionedEntries = new HashMap<>(); - Iterator<Entry<String,JarEntry>> iter = archiveEntries.entrySet().iterator(); + Map<String, VersionedJarEntry> versionedEntries = new HashMap<>(); + Iterator<Entry<String, JarEntry>> iter = archiveEntries.entrySet().iterator(); while (iter.hasNext()) { - Entry<String,JarEntry> entry = iter.next(); + Entry<String, JarEntry> entry = iter.next(); String name = entry.getKey(); if (name.startsWith("META-INF/versions/")) { // Remove the multi-release version @@ -190,16 +179,14 @@ public class JarWarResourceSet extends AbstractArchiveResourceSet { if (versionedJarEntry == null) { // No versioned entry found for this name. Create // one. - versionedEntries.put(baseName, - new VersionedJarEntry(version, entry.getValue())); + versionedEntries.put(baseName, new VersionedJarEntry(version, entry.getValue())); } else { // Ignore any entry for which we have already found // a later version if (version > versionedJarEntry.getVersion()) { // Replace the entry targeted at an earlier // version - versionedEntries.put(baseName, - new VersionedJarEntry(version, entry.getValue())); + versionedEntries.put(baseName, new VersionedJarEntry(version, entry.getValue())); } } } @@ -207,9 +194,8 @@ public class JarWarResourceSet extends AbstractArchiveResourceSet { } } - for (Entry<String,VersionedJarEntry> versionedJarEntry : versionedEntries.entrySet()) { - archiveEntries.put(versionedJarEntry.getKey(), - versionedJarEntry.getValue().getJarEntry()); + for (Entry<String, VersionedJarEntry> versionedJarEntry : versionedEntries.entrySet()) { + archiveEntries.put(versionedJarEntry.getKey(), versionedJarEntry.getValue().getJarEntry()); } } @@ -217,8 +203,7 @@ public class JarWarResourceSet extends AbstractArchiveResourceSet { /** * {@inheritDoc} * <p> - * Should never be called since {@link #getArchiveEntries(boolean)} always - * returns a Map. + * Should never be called since {@link #getArchiveEntries(boolean)} always returns a Map. */ @Override protected JarEntry getArchiveEntry(String pathInArchive) { @@ -234,7 +219,7 @@ public class JarWarResourceSet extends AbstractArchiveResourceSet { } - //-------------------------------------------------------- Lifecycle methods + // -------------------------------------------------------- Lifecycle methods @Override protected void initInternal() throws LifecycleException { diff --git a/java/org/apache/catalina/webresources/StandardRoot.java b/java/org/apache/catalina/webresources/StandardRoot.java index 69efa79b73..2cb98e277a 100644 --- a/java/org/apache/catalina/webresources/StandardRoot.java +++ b/java/org/apache/catalina/webresources/StandardRoot.java @@ -51,14 +51,13 @@ import org.apache.tomcat.util.res.StringManager; /** * <p> - * Provides the resources implementation for a web application. The - * {@link org.apache.catalina.Lifecycle} of this class should be aligned with - * that of the associated {@link Context}. - * </p><p> - * This implementation assumes that the base attribute supplied to {@link - * StandardRoot#createWebResourceSet( - * org.apache.catalina.WebResourceRoot.ResourceSetType, String, String, String, - * String)} represents the absolute path to a file. + * Provides the resources implementation for a web application. The {@link org.apache.catalina.Lifecycle} of this class + * should be aligned with that of the associated {@link Context}. + * </p> + * <p> + * This implementation assumes that the base attribute supplied to + * {@link StandardRoot#createWebResourceSet( org.apache.catalina.WebResourceRoot.ResourceSetType, String, String, String, String)} + * represents the absolute path to a file. * </p> */ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot { @@ -85,8 +84,7 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot // Constructs to make iteration over all WebResourceSets simpler private final List<WebResourceSet> mainResources = new ArrayList<>(); - private final List<List<WebResourceSet>> allResources = - new ArrayList<>(); + private final List<List<WebResourceSet>> allResources = new ArrayList<>(); { allResources.add(preResources); allResources.add(mainResources); @@ -97,10 +95,8 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot /** - * Creates a new standard implementation of {@link WebResourceRoot}. A no - * argument constructor is required for this to work with the digester. - * {@link #setContext(Context)} must be called before this component is - * initialized. + * Creates a new standard implementation of {@link WebResourceRoot}. A no argument constructor is required for this + * to work with the digester. {@link #setContext(Context)} must be called before this component is initialized. */ public StandardRoot() { // NO-OP @@ -206,8 +202,7 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot return getResource(path, true, false); } - protected WebResource getResource(String path, boolean validate, - boolean useClassLoaderResources) { + protected WebResource getResource(String path, boolean validate, boolean useClassLoaderResources) { if (validate) { path = validate(path); } @@ -233,22 +228,20 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot /** - * Ensures that this object is in a valid state to serve resources, checks - * that the path is a String that starts with '/' and checks that the path - * can be normalized without stepping outside of the root. + * Ensures that this object is in a valid state to serve resources, checks that the path is a String that starts + * with '/' and checks that the path can be normalized without stepping outside of the root. * * @param path The path to validate - * @return the normalized path + * + * @return the normalized path */ private String validate(String path) { if (!getState().isAvailable()) { - throw new IllegalStateException( - sm.getString("standardRoot.checkStateNotStarted")); + throw new IllegalStateException(sm.getString("standardRoot.checkStateNotStarted")); } if (path == null || path.length() == 0 || !path.startsWith("/")) { - throw new IllegalArgumentException( - sm.getString("standardRoot.invalidPath", path)); + throw new IllegalArgumentException(sm.getString("standardRoot.invalidPath", path)); } String result; @@ -262,21 +255,19 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot result = RequestUtil.normalize(path, false); } if (result == null || result.length() == 0 || !result.startsWith("/")) { - throw new IllegalArgumentException( - sm.getString("standardRoot.invalidPathNormal", path, result)); + throw new IllegalArgumentException(sm.getString("standardRoot.invalidPathNormal", path, result)); } return result; } - protected final WebResource getResourceInternal(String path, - boolean useClassLoaderResources) { + protected final WebResource getResourceInternal(String path, boolean useClassLoaderResources) { WebResource result = null; WebResource virtual = null; WebResource mainEmpty = null; for (List<WebResourceSet> list : allResources) { for (WebResourceSet webResourceSet : list) { - if (!useClassLoaderResources && !webResourceSet.getClassLoaderOnly() || + if (!useClassLoaderResources && !webResourceSet.getClassLoaderOnly() || useClassLoaderResources && !webResourceSet.getStaticOnly()) { result = webResourceSet.getResource(path); if (result.exists()) { @@ -307,8 +298,7 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot return getResources(path, false); } - private WebResource[] getResources(String path, - boolean useClassLoaderResources) { + private WebResource[] getResources(String path, boolean useClassLoaderResources) { path = validate(path); if (isCachingAllowed()) { @@ -318,8 +308,7 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot } } - protected WebResource[] getResourcesInternal(String path, - boolean useClassLoaderResources) { + protected WebResource[] getResourcesInternal(String path, boolean useClassLoaderResources) { List<WebResource> result = new ArrayList<>(); for (List<WebResourceSet> list : allResources) { for (WebResourceSet webResourceSet : list) { @@ -362,19 +351,18 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot } // TODO: Should the createWebResourceSet() methods be removed to some - // utility class for file system based resource sets? + // utility class for file system based resource sets? @Override - public void createWebResourceSet(ResourceSetType type, String webAppMount, - URL url, String internalPath) { + public void createWebResourceSet(ResourceSetType type, String webAppMount, URL url, String internalPath) { BaseLocation baseLocation = new BaseLocation(url); - createWebResourceSet(type, webAppMount, baseLocation.getBasePath(), - baseLocation.getArchivePath(), internalPath); + createWebResourceSet(type, webAppMount, baseLocation.getBasePath(), baseLocation.getArchivePath(), + internalPath); } @Override - public void createWebResourceSet(ResourceSetType type, String webAppMount, - String base, String archivePath, String internalPath) { + public void createWebResourceSet(ResourceSetType type, String webAppMount, String base, String archivePath, + String internalPath) { List<WebResourceSet> resourceList; WebResourceSet resourceSet; @@ -392,8 +380,7 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot resourceList = postResources; break; default: - throw new IllegalArgumentException( - sm.getString("standardRoot.createUnknownType", type)); + throw new IllegalArgumentException(sm.getString("standardRoot.createUnknownType", type)); } // This implementation assumes that the base for all resources will be a @@ -403,21 +390,16 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot if (file.isFile()) { if (archivePath != null) { // Must be a JAR nested inside a WAR if archivePath is non-null - resourceSet = new JarWarResourceSet(this, webAppMount, base, - archivePath, internalPath); + resourceSet = new JarWarResourceSet(this, webAppMount, base, archivePath, internalPath); } else if (file.getName().toLowerCase(Locale.ENGLISH).endsWith(".jar")) { - resourceSet = new JarResourceSet(this, webAppMount, base, - internalPath); + resourceSet = new JarResourceSet(this, webAppMount, base, internalPath); } else { - resourceSet = new FileResourceSet(this, webAppMount, base, - internalPath); + resourceSet = new FileResourceSet(this, webAppMount, base, internalPath); } } else if (file.isDirectory()) { - resourceSet = - new DirResourceSet(this, webAppMount, base, internalPath); + resourceSet = new DirResourceSet(this, webAppMount, base, internalPath); } else { - throw new IllegalArgumentException( - sm.getString("standardRoot.createInvalidFile", file)); + throw new IllegalArgumentException(sm.getString("standardRoot.createInvalidFile", file)); } if (type.equals(ResourceSetType.CLASSES_JAR)) { @@ -591,32 +573,27 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot } /** - * Class loader resources are handled by treating JARs in WEB-INF/lib as - * resource JARs (without the internal META-INF/resources/ prefix) mounted - * at WEB-INF/classes (rather than the web app root). This enables reuse - * of the resource handling plumbing. - * - * These resources are marked as class loader only so they are only used in - * the methods that are explicitly defined to return class loader resources. - * This prevents calls to getResource("/WEB-INF/classes") returning from one - * or more of the JAR files. + * Class loader resources are handled by treating JARs in WEB-INF/lib as resource JARs (without the internal + * META-INF/resources/ prefix) mounted at WEB-INF/classes (rather than the web app root). This enables reuse of the + * resource handling plumbing. These resources are marked as class loader only so they are only used in the methods + * that are explicitly defined to return class loader resources. This prevents calls to + * getResource("/WEB-INF/classes") returning from one or more of the JAR files. * - * @throws LifecycleException If an error occurs that should stop the web - * application from starting + * @throws LifecycleException If an error occurs that should stop the web application from starting */ protected void processWebInfLib() throws LifecycleException { WebResource[] possibleJars = listResources("/WEB-INF/lib", false); for (WebResource possibleJar : possibleJars) { if (possibleJar.isFile() && possibleJar.getName().endsWith(".jar")) { - createWebResourceSet(ResourceSetType.CLASSES_JAR, - "/WEB-INF/classes", possibleJar.getURL(), "/"); + createWebResourceSet(ResourceSetType.CLASSES_JAR, "/WEB-INF/classes", possibleJar.getURL(), "/"); } } } /** * For unit testing. + * * @param main The main resources */ protected final void setMainResources(WebResourceSet main) { @@ -633,7 +610,6 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot } - @Override public void gc() { for (List<WebResourceSet> list : allResources) { @@ -672,11 +648,9 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot } - /* - * Returns true if and only if all the resources for this web application - * are provided via a packed WAR file. It is used to optimise cache - * validation in this case on the basis that the WAR file will not change. + * Returns true if and only if all the resources for this web application are provided via a packed WAR file. It is + * used to optimise cache validation in this case on the basis that the WAR file will not change. */ protected boolean isPackedWarFile() { return main instanceof WarResourceSet && preResources.isEmpty() && postResources.isEmpty(); @@ -704,8 +678,7 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot super.initInternal(); if (context == null) { - throw new IllegalStateException( - sm.getString("standardRoot.noContext")); + throw new IllegalStateException(sm.getString("standardRoot.noContext")); } cacheJmxName = register(cache, getObjectNameKeyProperties() + ",name=Cache"); @@ -766,16 +739,14 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot } else { File f = new File(docBase); if (!f.isAbsolute()) { - f = new File(((Host)context.getParent()).getAppBaseFile(), f.getPath()); + f = new File(((Host) context.getParent()).getAppBaseFile(), f.getPath()); } if (f.isDirectory()) { mainResourceSet = new DirResourceSet(this, "/", f.getAbsolutePath(), "/"); - } else if(f.isFile() && docBase.endsWith(".war")) { + } else if (f.isFile() && docBase.endsWith(".war")) { mainResourceSet = new WarResourceSet(this, "/", f.getAbsolutePath()); } else { - throw new IllegalArgumentException( - sm.getString("standardRoot.startInvalidMain", - f.getAbsolutePath())); + throw new IllegalArgumentException(sm.getString("standardRoot.startInvalidMain", f.getAbsolutePath())); } } @@ -806,9 +777,7 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot classResources.clear(); for (TrackedWebResource trackedResource : trackedResources) { - log.error(sm.getString("standardRoot.lockedFile", - context.getName(), - trackedResource.getName()), + log.error(sm.getString("standardRoot.lockedFile", context.getName(), trackedResource.getName()), trackedResource.getCreatedBy()); try { trackedResource.close(); @@ -859,12 +828,12 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot throw new IllegalArgumentException(e); } int startOfArchivePath = endOfFileUrl + 2; - if (jarUrl.length() > startOfArchivePath) { + if (jarUrl.length() > startOfArchivePath) { archivePath = jarUrl.substring(startOfArchivePath); } else { archivePath = null; } - } else if ("file".equals(url.getProtocol())){ + } else if ("file".equals(url.getProtocol())) { try { f = new File(url.toURI()); } catch (URISyntaxException e) { @@ -872,8 +841,7 @@ public class StandardRoot extends LifecycleMBeanBase implements WebResourceRoot } archivePath = null; } else { - throw new IllegalArgumentException(sm.getString( - "standardRoot.unsupportedProtocol", url.getProtocol())); + throw new IllegalArgumentException(sm.getString("standardRoot.unsupportedProtocol", url.getProtocol())); } basePath = f.getAbsolutePath(); diff --git a/java/org/apache/catalina/webresources/TomcatJarInputStream.java b/java/org/apache/catalina/webresources/TomcatJarInputStream.java index a00dda56f1..a05add04fa 100644 --- a/java/org/apache/catalina/webresources/TomcatJarInputStream.java +++ b/java/org/apache/catalina/webresources/TomcatJarInputStream.java @@ -23,9 +23,8 @@ import java.util.jar.JarInputStream; import java.util.zip.ZipEntry; /** - * The purpose of this sub-class is to obtain references to the JarEntry objects - * for META-INF/ and META-INF/MANIFEST.MF that are otherwise swallowed by the - * JarInputStream implementation. + * The purpose of this sub-class is to obtain references to the JarEntry objects for META-INF/ and META-INF/MANIFEST.MF + * that are otherwise swallowed by the JarInputStream implementation. */ public class TomcatJarInputStream extends JarInputStream { diff --git a/java/org/apache/catalina/webresources/TomcatURLStreamHandlerFactory.java b/java/org/apache/catalina/webresources/TomcatURLStreamHandlerFactory.java index d58f9d3fef..02a0842eea 100644 --- a/java/org/apache/catalina/webresources/TomcatURLStreamHandlerFactory.java +++ b/java/org/apache/catalina/webresources/TomcatURLStreamHandlerFactory.java @@ -33,9 +33,8 @@ public class TomcatURLStreamHandlerFactory implements URLStreamHandlerFactory { private static volatile TomcatURLStreamHandlerFactory instance = null; /** - * Obtain a reference to the singleton instance. It is recommended that - * callers check the value of {@link #isRegistered()} before using the - * returned instance. + * Obtain a reference to the singleton instance. It is recommended that callers check the value of + * {@link #isRegistered()} before using the returned instance. * * @return A reference to the singleton instance */ @@ -61,17 +60,14 @@ public class TomcatURLStreamHandlerFactory implements URLStreamHandlerFactory { private final boolean registered; // List of factories for application defined stream handler factories. - private final List<URLStreamHandlerFactory> userFactories = - new CopyOnWriteArrayList<>(); + private final List<URLStreamHandlerFactory> userFactories = new CopyOnWriteArrayList<>(); /** - * Register this factory with the JVM. May be called more than once. The - * implementation ensures that registration only occurs once. + * Register this factory with the JVM. May be called more than once. The implementation ensures that registration + * only occurs once. * - * @return <code>true</code> if the factory is already registered with the - * JVM or was successfully registered as a result of this call. - * <code>false</code> if the factory was disabled prior to this - * call. + * @return <code>true</code> if the factory is already registered with the JVM or was successfully registered as a + * result of this call. <code>false</code> if the factory was disabled prior to this call. */ public static boolean register() { return getInstanceInternal(true).isRegistered(); @@ -79,13 +75,10 @@ public class TomcatURLStreamHandlerFactory implements URLStreamHandlerFactory { /** - * Prevent this this factory from registering with the JVM. May be called - * more than once. + * Prevent this this factory from registering with the JVM. May be called more than once. * - * @return <code>true</code> if the factory is already disabled or was - * successfully disabled as a result of this call. - * <code>false</code> if the factory was already registered prior - * to this call. + * @return <code>true</code> if the factory is already disabled or was successfully disabled as a result of this + * call. <code>false</code> if the factory was already registered prior to this call. */ public static boolean disable() { return !getInstanceInternal(false).isRegistered(); @@ -93,9 +86,8 @@ public class TomcatURLStreamHandlerFactory implements URLStreamHandlerFactory { /** - * Release references to any user provided factories that have been loaded - * using the provided class loader. Called during web application stop to - * prevent memory leaks. + * Release references to any user provided factories that have been loaded using the provided class loader. Called + * during web application stop to prevent memory leaks. * * @param classLoader The class loader to release */ @@ -137,13 +129,10 @@ public class TomcatURLStreamHandlerFactory implements URLStreamHandlerFactory { /** - * Since the JVM only allows a single call to - * {@link URL#setURLStreamHandlerFactory(URLStreamHandlerFactory)} and - * Tomcat needs to register a handler, provide a mechanism to allow - * applications to register their own handlers. + * Since the JVM only allows a single call to {@link URL#setURLStreamHandlerFactory(URLStreamHandlerFactory)} and + * Tomcat needs to register a handler, provide a mechanism to allow applications to register their own handlers. * - * @param factory The user provided factory to add to the factories Tomcat - * has already registered + * @param factory The user provided factory to add to the factories Tomcat has already registered */ public void addUserFactory(URLStreamHandlerFactory factory) { userFactories.add(factory); @@ -163,8 +152,7 @@ public class TomcatURLStreamHandlerFactory implements URLStreamHandlerFactory { // Application handlers for (URLStreamHandlerFactory factory : userFactories) { - URLStreamHandler handler = - factory.createURLStreamHandler(protocol); + URLStreamHandler handler = factory.createURLStreamHandler(protocol); if (handler != null) { return handler; } diff --git a/java/org/apache/catalina/webresources/VirtualResource.java b/java/org/apache/catalina/webresources/VirtualResource.java index 3f30b5fc26..24a33e1e81 100644 --- a/java/org/apache/catalina/webresources/VirtualResource.java +++ b/java/org/apache/catalina/webresources/VirtualResource.java @@ -22,8 +22,7 @@ public class VirtualResource extends EmptyResource { private final String name; - public VirtualResource(WebResourceRoot root, String webAppPath, - String name) { + public VirtualResource(WebResourceRoot root, String webAppPath, String name) { super(root, webAppPath); this.name = name; } diff --git a/java/org/apache/catalina/webresources/WarResource.java b/java/org/apache/catalina/webresources/WarResource.java index c6425311a3..4672a3923f 100644 --- a/java/org/apache/catalina/webresources/WarResource.java +++ b/java/org/apache/catalina/webresources/WarResource.java @@ -23,18 +23,16 @@ import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.buf.UriUtil; /** - * Represents a single resource (file or directory) that is located within a - * WAR. + * Represents a single resource (file or directory) that is located within a WAR. */ public class WarResource extends AbstractSingleArchiveResource { private static final Log log = LogFactory.getLog(WarResource.class); - public WarResource(AbstractArchiveResourceSet archiveResourceSet, String webAppPath, - String baseUrl, JarEntry jarEntry) { - super(archiveResourceSet, webAppPath, "war:" + baseUrl + UriUtil.getWarSeparator(), - jarEntry, baseUrl); + public WarResource(AbstractArchiveResourceSet archiveResourceSet, String webAppPath, String baseUrl, + JarEntry jarEntry) { + super(archiveResourceSet, webAppPath, "war:" + baseUrl + UriUtil.getWarSeparator(), jarEntry, baseUrl); } diff --git a/java/org/apache/catalina/webresources/WarResourceSet.java b/java/org/apache/catalina/webresources/WarResourceSet.java index f6fdd29fd3..c3d76d49dc 100644 --- a/java/org/apache/catalina/webresources/WarResourceSet.java +++ b/java/org/apache/catalina/webresources/WarResourceSet.java @@ -35,30 +35,23 @@ public class WarResourceSet extends AbstractSingleArchiveResourceSet { /** - * Creates a new {@link org.apache.catalina.WebResourceSet} based on a WAR - * file. + * Creates a new {@link org.apache.catalina.WebResourceSet} based on a WAR file. * - * @param root The {@link WebResourceRoot} this new - * {@link org.apache.catalina.WebResourceSet} will - * be added to. - * @param webAppMount The path within the web application at which this - * {@link org.apache.catalina.WebResourceSet} will - * be mounted. - * @param base The absolute path to the WAR file on the file system - * from which the resources will be served. + * @param root The {@link WebResourceRoot} this new {@link org.apache.catalina.WebResourceSet} will be added + * to. + * @param webAppMount The path within the web application at which this {@link org.apache.catalina.WebResourceSet} + * will be mounted. + * @param base The absolute path to the WAR file on the file system from which the resources will be served. * - * @throws IllegalArgumentException if the webAppMount is not valid (valid - * paths must start with '/') + * @throws IllegalArgumentException if the webAppMount is not valid (valid paths must start with '/') */ - public WarResourceSet(WebResourceRoot root, String webAppMount, String base) - throws IllegalArgumentException { + public WarResourceSet(WebResourceRoot root, String webAppMount, String base) throws IllegalArgumentException { super(root, webAppMount, base, "/"); } @Override - protected WebResource createArchiveResource(JarEntry jarEntry, - String webAppPath, Manifest manifest) { + protected WebResource createArchiveResource(JarEntry jarEntry, String webAppPath, Manifest manifest) { return new WarResource(this, webAppPath, getBaseUrlString(), jarEntry); } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org