diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/archive/ExplodedArchive.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/archive/ExplodedArchive.java index 635aec210c..5f6b8fb63e 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/archive/ExplodedArchive.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/archive/ExplodedArchive.java @@ -84,7 +84,7 @@ public class ExplodedArchive implements Archive { @Override public URL getUrl() throws MalformedURLException { - return new URL("file", "", -1, this.root.toURI().getPath()); + return this.root.toURI().toURL(); } @Override 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 80dc57c425..5eb16f948b 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,7 +23,6 @@ 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; @@ -37,6 +36,7 @@ import org.junit.rules.TemporaryFolder; import org.springframework.boot.loader.TestJarCreator; import org.springframework.boot.loader.archive.Archive.Entry; +import org.springframework.util.StringUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -45,6 +45,7 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Phillip Webb * @author Dave Syer + * @author Andy Wilkinson */ public class ExplodedArchiveTests { @@ -57,10 +58,20 @@ public class ExplodedArchiveTests { @Before public void setup() throws Exception { + createArchive(); + } + + private void createArchive() throws Exception { + createArchive(null); + } + + private void createArchive(String folderName) throws Exception { File file = this.temporaryFolder.newFile(); TestJarCreator.createTestJar(file); - this.rootFolder = this.temporaryFolder.newFolder(); + this.rootFolder = StringUtils.hasText(folderName) + ? this.temporaryFolder.newFolder(folderName) + : this.temporaryFolder.newFolder(); JarFile jarFile = new JarFile(file); Enumeration entries = jarFile.entries(); while (entries.hasMoreElements()) { @@ -102,9 +113,13 @@ public class ExplodedArchiveTests { @Test public void getUrl() throws Exception { - URL url = this.archive.getUrl(); - assertThat(new File(URLDecoder.decode(url.getFile(), "UTF-8"))) - .isEqualTo(this.rootFolder); + assertThat(this.archive.getUrl()).isEqualTo(this.rootFolder.toURI().toURL()); + } + + @Test + public void getUrlWithSpaceInPath() throws Exception { + createArchive("spaces in the name"); + assertThat(this.archive.getUrl()).isEqualTo(this.rootFolder.toURI().toURL()); } @Test