From ef2eb8af6c490ff6eec6525735dee8d73fb2fb42 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 27 Jan 2014 21:24:10 -0800 Subject: [PATCH] Fix URL from String creation to work on Windows Fixed the nested jar URLHandler to correctly deal with files on Windows. Fixes gh-269 --- .../java/org/springframework/boot/loader/jar/Handler.java | 8 +++++++- .../java/org/springframework/boot/loader/jar/JarFile.java | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) 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 5170fbe56d..75a963f269 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 @@ -34,6 +34,8 @@ public class Handler extends URLStreamHandler { // NOTE: in order to be found as a URL protocol hander, this class must be public, // must be named Handler and must be in a package ending '.jar' + private static final String FILE_PROTOCOL = "file:"; + private static final String SEPARATOR = JarURLConnection.SEPARATOR; private final JarFile jarFile; @@ -74,7 +76,11 @@ public class Handler extends URLStreamHandler { private JarFile getRootJarFile(String name) throws IOException { try { - return new JarFile(new File(new URL(name).toURI())); + if (!name.startsWith(FILE_PROTOCOL)) { + throw new IllegalStateException("Not a file URL"); + } + String path = name.substring(FILE_PROTOCOL.length()); + return new JarFile(new File(path)); } catch (Exception ex) { throw new IOException("Unable to open root Jar file '" + name + "'", ex); diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarFile.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarFile.java index 3953235fa5..cf07fe0a08 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarFile.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarFile.java @@ -104,7 +104,7 @@ public class JarFile extends java.util.jar.JarFile implements Iterable