From 7e7733d45dbf30ecb47a198c5f709c7f1ad00b5d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 25 Jun 2014 15:43:07 -0700 Subject: [PATCH] Deal with spaces in file references Fixes gh-1169 --- .../org/springframework/boot/loader/PropertiesLauncher.java | 4 +++- .../java/org/springframework/boot/loader/jar/Handler.java | 3 ++- .../boot/loader/archive/ExplodedArchiveTests.java | 4 +++- .../org/springframework/boot/loader/jar/JarFileTests.java | 1 - 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/PropertiesLauncher.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/PropertiesLauncher.java index a27a6decad..755f209aec 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/PropertiesLauncher.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/PropertiesLauncher.java @@ -25,6 +25,7 @@ import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; import java.net.URLConnection; +import java.net.URLDecoder; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -518,7 +519,8 @@ public class PropertiesLauncher extends Launcher { } } else { - lib.add(0, new ExplodedArchive(new File(url.getFile()))); + String filename = URLDecoder.decode(url.getFile(), "UTF-8"); + lib.add(0, new ExplodedArchive(new File(filename))); } } } diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/Handler.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/Handler.java index a9eeb8b646..0f40d5236a 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/Handler.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/Handler.java @@ -23,6 +23,7 @@ import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; +import java.net.URLDecoder; import java.net.URLStreamHandler; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -151,7 +152,7 @@ public class Handler extends URLStreamHandler { throw new IllegalStateException("Not a file URL"); } String path = name.substring(FILE_PROTOCOL.length()); - File file = new File(path); + File file = new File(URLDecoder.decode(path, "UTF-8")); Map cache = rootFileCache.get(); JarFile jarFile = (cache == null ? null : cache.get(file)); if (jarFile == null) { diff --git a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/archive/ExplodedArchiveTests.java b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/archive/ExplodedArchiveTests.java index 4031a669a9..652fb51cd8 100644 --- a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/archive/ExplodedArchiveTests.java +++ b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/archive/ExplodedArchiveTests.java @@ -23,6 +23,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLClassLoader; +import java.net.URLDecoder; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; @@ -106,7 +107,8 @@ public class ExplodedArchiveTests { @Test public void getUrl() throws Exception { URL url = this.archive.getUrl(); - assertThat(new File(url.toURI()), equalTo(new File(this.rootFolder.toURI()))); + assertThat(new File(URLDecoder.decode(url.getFile(), "UTF-8")), + equalTo(this.rootFolder)); } @Test diff --git a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarFileTests.java b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarFileTests.java index 5a45334f34..7875c4e48e 100644 --- a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarFileTests.java +++ b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarFileTests.java @@ -97,7 +97,6 @@ public class JarFileTests { assertThat(urlClassLoader.getResource("special/\u00EB.dat"), notNullValue()); assertThat(urlClassLoader.getResource("d/9.dat"), notNullValue()); jarFile.close(); - } @Test