2015-10-25 16:09 GMT+02:00 Konstantin Kolinko <knst.koli...@gmail.com>: > > 2015-10-25 16:40 GMT+03:00 <ma...@apache.org>: > > Author: markt > > Date: Sun Oct 25 13:40:52 2015 > > New Revision: 1710445 > > > > URL: http://svn.apache.org/viewvc?rev=1710445&view=rev > > Log: > > https://bz.apache.org/bugzilla/show_bug.cgi?id=58518 > > Fix a regression in BZ 56777 (that added support for URIs in config file > > locations) > > File paths on Windows could previously be specified with \ or / as the > > separator. BZ 56777 broke that. This commit restores that behaviour. > > > > Modified: > > tomcat/trunk/java/org/apache/tomcat/util/file/ConfigFileLoader.java > > > > Modified: tomcat/trunk/java/org/apache/tomcat/util/file/ConfigFileLoader.java > > URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/file/ConfigFileLoader.java?rev=1710445&r1=1710444&r2=1710445&view=diff > > ============================================================================== > > --- tomcat/trunk/java/org/apache/tomcat/util/file/ConfigFileLoader.java (original) > > +++ tomcat/trunk/java/org/apache/tomcat/util/file/ConfigFileLoader.java Sun Oct 25 13:40:52 2015 > > @@ -30,11 +30,12 @@ import java.net.URL; > > */ > > public class ConfigFileLoader { > > > > + private static final File CATALINA_BASE_FILE; > > private static final URI CATALINA_BASE_URI; > > > > static { > > - File catalinaBase = new File(System.getProperty("catalina.base")); > > - CATALINA_BASE_URI = catalinaBase.toURI(); > > + CATALINA_BASE_FILE = new File(System.getProperty("catalina.base")); > > + CATALINA_BASE_URI = CATALINA_BASE_FILE.toURI(); > > } > > > > private ConfigFileLoader() { > > @@ -59,17 +60,30 @@ public class ConfigFileLoader { > > // Absolute URIs will be left alone > > // Relative files will be resolved relative to catalina base > > // Absolute files will be converted to URIs > > - URI uri; > > - if (location != null && > > - (location.length() > 2 && ":\\".equals(location.substring(1, 3)) || > > - location.startsWith("\\\\"))) { > > - // This is an absolute file path in Windows or a UNC path > > - File f = new File(location); > > - uri =f.getAbsoluteFile().toURI(); > > - } else { > > - // URL, relative path or an absolute path on a non-Windows platforms > > + > > + URI uri = null; > > + > > + // Location was originally always a file before URI support was added so > > + // try file first. > > + > > + // First guess, an absolute file path > > + File f = new File(location); > > + if (!f.isFile()) { > > + // Second guess, a file path relative to CATALINA_BASE > > + if (!f.isAbsolute()) { > > + f = new File(CATALINA_BASE_FILE, location); > > + } > > + } > > + if (f.isFile()) { > > + uri = f.getAbsoluteFile().toURI(); > > + } > > + > > + if (uri == null) { > > + // Third and final guess, a URI > > uri = CATALINA_BASE_URI.resolve(location); > > } > > + > > + // Obtain the input stream we need > > URL url = uri.toURL(); > > return url.openConnection().getInputStream(); > > } > > > This implementation is OK, but performs a bit more work than necessary. > > 1) Calling isFile() twice -> accessing hard drive twice > 2) Conversion File -> URI -> URL -> parsing a file: URL -> ... just > to open an InputStream for a known File.
I also have problems with spaces in the path java.lang.IllegalArgumentException: Illegal character in path at index 12: c:/... at java.net.URI.create(URI.java:859) at java.net.URI.resolve(URI.java:1043) at org.apache.tomcat.util.file.ConfigFileLoader.getInputStream(ConfigFileLoader.java:83) > Maybe add some debug logging to print out what location for the config > file was actually used. > > Best regards, > Konstantin Kolinko > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org >