Merge branch '2.0.x'

This commit is contained in:
Andy Wilkinson 2018-08-13 11:38:56 +01:00
commit e41519b6b1
2 changed files with 26 additions and 2 deletions

View File

@ -211,7 +211,15 @@ public class Handler extends URLStreamHandler {
}
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) {

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -158,12 +158,28 @@ public class HandlerTests {
"./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)
throws MalformedURLException {
URL standardUrl = new URL(new URL("jar:" + context), spec);
URL customHandlerUrl = new URL(new URL("jar", null, -1, context, this.handler),
spec);
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 {