mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-08-29 03:06:45 +08:00
Update JarURLConnection to support jar:file://… URLs
Previously, JarURLConnection would fail when created with a URL that began with jar:file:// as the double-slash is not included in jarFile.getUrl().getFile(). This commit updates JarURLConnection to normalise the value return from url.getFile() to remove a double-slash when present. Fixes gh-5287 Closes gh-5289
This commit is contained in:
parent
d6ad4dcc11
commit
a0f76eab47
@ -73,7 +73,11 @@ class JarURLConnection extends java.net.JarURLConnection {
|
|||||||
// What we pass to super is ultimately ignored
|
// What we pass to super is ultimately ignored
|
||||||
super(EMPTY_JAR_URL);
|
super(EMPTY_JAR_URL);
|
||||||
this.url = url;
|
this.url = url;
|
||||||
String spec = url.getFile().substring(jarFile.getUrl().getFile().length());
|
String urlFile = url.getFile();
|
||||||
|
if (urlFile.startsWith("file://")) {
|
||||||
|
urlFile = "file:" + urlFile.substring("file://".length());
|
||||||
|
}
|
||||||
|
String spec = urlFile.substring(jarFile.getUrl().getFile().length());
|
||||||
int separator;
|
int separator;
|
||||||
while ((separator = spec.indexOf(SEPARATOR)) > 0) {
|
while ((separator = spec.indexOf(SEPARATOR)) > 0) {
|
||||||
jarFile = getNestedJarFile(jarFile, spec.substring(0, separator));
|
jarFile = getNestedJarFile(jarFile, spec.substring(0, separator));
|
||||||
|
@ -334,6 +334,22 @@ public class JarFileTests {
|
|||||||
assertThat(connection.getEntryName(), equalTo("2.dat"));
|
assertThat(connection.getEntryName(), equalTo("2.dat"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createNonNestedUrlFromStringCreatedUsingPath() throws Exception {
|
||||||
|
// gh-5287
|
||||||
|
JarFile.registerUrlProtocolHandler();
|
||||||
|
String spec = "jar:" + this.rootJarFile.toPath().toUri() + "!/2.dat";
|
||||||
|
URL url = new URL(spec);
|
||||||
|
assertThat(url.toString(), equalTo(spec));
|
||||||
|
InputStream inputStream = url.openStream();
|
||||||
|
assertThat(inputStream, notNullValue());
|
||||||
|
assertThat(inputStream.read(), equalTo(2));
|
||||||
|
JarURLConnection connection = (JarURLConnection) url.openConnection();
|
||||||
|
assertThat(connection.getURL().toString(), equalTo(spec));
|
||||||
|
assertThat(connection.getJarFileURL().toURI(), equalTo(this.rootJarFile.toURI()));
|
||||||
|
assertThat(connection.getEntryName(), equalTo("2.dat"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getDirectoryInputStream() throws Exception {
|
public void getDirectoryInputStream() throws Exception {
|
||||||
InputStream inputStream = this.jarFile
|
InputStream inputStream = this.jarFile
|
||||||
|
Loading…
Reference in New Issue
Block a user