Preserve ref and query when creating URL in loader's handler
Closes gh-14011
This commit is contained in:
parent
3a2c962215
commit
384cfd2ad8
|
|
@ -211,7 +211,15 @@ public class Handler extends URLStreamHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setFile(URL context, String file) {
|
private void setFile(URL context, String file) {
|
||||||
setURL(context, JAR_PROTOCOL, null, -1, null, null, normalize(file), null, null);
|
String path = normalize(file);
|
||||||
|
String query = null;
|
||||||
|
int queryIndex = path.lastIndexOf('?');
|
||||||
|
if (queryIndex != -1) {
|
||||||
|
query = path.substring(queryIndex + 1);
|
||||||
|
path = path.substring(0, queryIndex);
|
||||||
|
}
|
||||||
|
setURL(context, JAR_PROTOCOL, null, -1, null, null, path, query,
|
||||||
|
context.getRef());
|
||||||
}
|
}
|
||||||
|
|
||||||
private String normalize(String file) {
|
private String normalize(String file) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2016 the original author or authors.
|
* Copyright 2012-2018 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -158,12 +158,28 @@ public class HandlerTests {
|
||||||
"./folderB/./b.xsd");
|
"./folderB/./b.xsd");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void urlWithRef() throws MalformedURLException {
|
||||||
|
assertStandardAndCustomHandlerUrlsAreEqual("file:/test.jar!/BOOT-INF/classes",
|
||||||
|
"!/foo.txt#alpha");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void urlWithQuery() throws MalformedURLException {
|
||||||
|
assertStandardAndCustomHandlerUrlsAreEqual("file:/test.jar!/BOOT-INF/classes",
|
||||||
|
"!/foo.txt?alpha");
|
||||||
|
}
|
||||||
|
|
||||||
private void assertStandardAndCustomHandlerUrlsAreEqual(String context, String spec)
|
private void assertStandardAndCustomHandlerUrlsAreEqual(String context, String spec)
|
||||||
throws MalformedURLException {
|
throws MalformedURLException {
|
||||||
URL standardUrl = new URL(new URL("jar:" + context), spec);
|
URL standardUrl = new URL(new URL("jar:" + context), spec);
|
||||||
URL customHandlerUrl = new URL(new URL("jar", null, -1, context, this.handler),
|
URL customHandlerUrl = new URL(new URL("jar", null, -1, context, this.handler),
|
||||||
spec);
|
spec);
|
||||||
assertThat(customHandlerUrl.toString()).isEqualTo(standardUrl.toString());
|
assertThat(customHandlerUrl.toString()).isEqualTo(standardUrl.toString());
|
||||||
|
assertThat(customHandlerUrl.getFile()).isEqualTo(standardUrl.getFile());
|
||||||
|
assertThat(customHandlerUrl.getPath()).isEqualTo(standardUrl.getPath());
|
||||||
|
assertThat(customHandlerUrl.getQuery()).isEqualTo(standardUrl.getQuery());
|
||||||
|
assertThat(customHandlerUrl.getRef()).isEqualTo(standardUrl.getRef());
|
||||||
}
|
}
|
||||||
|
|
||||||
private URL createUrl(String file) throws MalformedURLException {
|
private URL createUrl(String file) throws MalformedURLException {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue