Browse Source

Merge branch '1.3.x'

pull/5552/merge
Andy Wilkinson 10 years ago
parent
commit
d1a487333d
  1. 12
      spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java
  2. 12
      spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarFileTests.java

12
spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java

@ -59,6 +59,8 @@ class JarURLConnection extends java.net.JarURLConnection { @@ -59,6 +59,8 @@ class JarURLConnection extends java.net.JarURLConnection {
private static final JarEntryName EMPTY_JAR_ENTRY_NAME = new JarEntryName("");
private static final String FILE_COLON_DOUBLE_SLASH = "file://";
private static ThreadLocal<Boolean> useFastExceptions = new ThreadLocal<Boolean>();
private final JarFile jarFile;
@ -73,7 +75,8 @@ class JarURLConnection extends java.net.JarURLConnection { @@ -73,7 +75,8 @@ class JarURLConnection extends java.net.JarURLConnection {
// What we pass to super is ultimately ignored
super(EMPTY_JAR_URL);
this.url = url;
String spec = url.getFile().substring(jarFile.getUrl().getFile().length());
String spec = getNormalizedFile(url)
.substring(jarFile.getUrl().getFile().length());
int separator;
while ((separator = spec.indexOf(SEPARATOR)) > 0) {
jarFile = getNestedJarFile(jarFile, spec.substring(0, separator));
@ -83,6 +86,13 @@ class JarURLConnection extends java.net.JarURLConnection { @@ -83,6 +86,13 @@ class JarURLConnection extends java.net.JarURLConnection {
this.jarEntryName = getJarEntryName(spec);
}
private String getNormalizedFile(URL url) {
if (!url.getFile().startsWith(FILE_COLON_DOUBLE_SLASH)) {
return url.getFile();
}
return "file:" + url.getFile().substring(FILE_COLON_DOUBLE_SLASH.length());
}
private JarFile getNestedJarFile(JarFile jarFile, String name) throws IOException {
JarEntry jarEntry = jarFile.getJarEntry(name);
if (jarEntry == null) {

12
spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarFileTests.java

@ -313,8 +313,18 @@ public class JarFileTests { @@ -313,8 +313,18 @@ public class JarFileTests {
@Test
public void createNonNestedUrlFromString() throws Exception {
nonNestedJarFileFromString(
"jar:file:" + this.rootJarFile.getAbsolutePath() + "!/2.dat");
}
@Test
public void createNonNestedUrlFromStringWithDoubleSlash() throws Exception {
nonNestedJarFileFromString(
"jar:file://" + this.rootJarFile.getAbsolutePath() + "!/2.dat");
}
private void nonNestedJarFileFromString(String spec) throws Exception {
JarFile.registerUrlProtocolHandler();
String spec = "jar:" + this.rootJarFile.toURI() + "!/2.dat";
URL url = new URL(spec);
assertThat(url.toString()).isEqualTo(spec);
InputStream inputStream = url.openStream();

Loading…
Cancel
Save