Commit f918e0eb authored by Andy Wilkinson's avatar Andy Wilkinson

Merge branch '1.5.x'

parents 85900796 eee891db
...@@ -20,9 +20,11 @@ import java.io.File; ...@@ -20,9 +20,11 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.net.URLConnection; import java.net.URLConnection;
import java.net.URLDecoder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
...@@ -203,21 +205,24 @@ public class PropertiesLauncher extends Launcher { ...@@ -203,21 +205,24 @@ public class PropertiesLauncher extends Launcher {
if (config.startsWith("classpath:")) { if (config.startsWith("classpath:")) {
return getClasspathResource(config.substring("classpath:".length())); return getClasspathResource(config.substring("classpath:".length()));
} }
config = stripFileUrlPrefix(config); config = handleUrl(config);
if (isUrl(config)) { if (isUrl(config)) {
return getURLResource(config); return getURLResource(config);
} }
return getFileResource(config); return getFileResource(config);
} }
private String stripFileUrlPrefix(String config) { private String handleUrl(String path) throws UnsupportedEncodingException {
if (config.startsWith("file:")) { if (path.startsWith("jar:file:") || path.startsWith("file:")) {
config = config.substring("file:".length()); path = URLDecoder.decode(path, "UTF-8");
if (config.startsWith("//")) { if (path.startsWith("file:")) {
config = config.substring(2); path = path.substring("file:".length());
if (path.startsWith("//")) {
path = path.substring(2);
}
} }
} }
return config; return path;
} }
private boolean isUrl(String config) { private boolean isUrl(String config) {
...@@ -454,8 +459,8 @@ public class PropertiesLauncher extends Launcher { ...@@ -454,8 +459,8 @@ public class PropertiesLauncher extends Launcher {
} }
private List<Archive> getClassPathArchives(String path) throws Exception { private List<Archive> getClassPathArchives(String path) throws Exception {
String root = cleanupPath(stripFileUrlPrefix(path)); String root = cleanupPath(handleUrl(path));
List<Archive> lib = new ArrayList<>(); List<Archive> lib = new ArrayList<Archive>();
File file = new File(root); File file = new File(root);
if (!"/".equals(root)) { if (!"/".equals(root)) {
if (!isAbsolutePath(root)) { if (!isAbsolutePath(root)) {
......
...@@ -346,6 +346,17 @@ public class PropertiesLauncherTests { ...@@ -346,6 +346,17 @@ public class PropertiesLauncherTests {
assertThat(launcher.getMainClass()).isEqualTo("demo.FooApplication"); assertThat(launcher.getMainClass()).isEqualTo("demo.FooApplication");
} }
@Test
public void encodedFileUrlLoaderPathIsHandledCorrectly() throws Exception {
File loaderPath = this.temporaryFolder.newFolder("loader path");
System.setProperty("loader.path", loaderPath.toURI().toURL().toString());
PropertiesLauncher launcher = new PropertiesLauncher();
List<Archive> archives = launcher.getClassPathArchives();
assertThat(archives.size()).isEqualTo(1);
File archiveRoot = (File) ReflectionTestUtils.getField(archives.get(0), "root");
assertThat(archiveRoot).isEqualTo(loaderPath);
}
private void waitFor(String value) throws Exception { private void waitFor(String value) throws Exception {
int count = 0; int count = 0;
boolean timeout = false; boolean timeout = false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment