Make JarURLConnection return entry's last modified time

See gh-9893
This commit is contained in:
rostislav.dudka 2017-07-28 15:16:15 +03:00 committed by Andy Wilkinson
parent 5c13b8bf50
commit 7c7259beec
2 changed files with 25 additions and 0 deletions

View File

@ -36,6 +36,7 @@ import org.springframework.boot.loader.data.RandomAccessData.ResourceAccess;
*
* @author Phillip Webb
* @author Andy Wilkinson
* @author Rostyslav Dudka
*/
final class JarURLConnection extends java.net.JarURLConnection {
@ -234,6 +235,21 @@ final class JarURLConnection extends java.net.JarURLConnection {
return this.permission;
}
@Override
public long getLastModified() {
int defaultTime = 0;
if (this.jarFile == null || this.jarEntryName.isEmpty()) {
return defaultTime;
}
try {
JarEntry entry = getJarEntry();
return (entry == null ? defaultTime : entry.getTime());
}
catch (IOException ex) {
return defaultTime;
}
}
static void setUseFastExceptions(boolean useFastExceptions) {
JarURLConnection.useFastExceptions.set(useFastExceptions);
}

View File

@ -35,6 +35,7 @@ import static org.assertj.core.api.Assertions.assertThat;
*
* @author Andy Wilkinson
* @author Phillip Webb
* @author Rostyslav Dudka
*/
public class JarURLConnectionTests {
@ -150,6 +151,14 @@ public class JarURLConnectionTests {
assertThat(url.openConnection().getContentLengthLong()).isEqualTo(1);
}
@Test
public void getLastModifiedReturnsLastModifiedTimeOfJarEntry() throws Exception {
URL url = new URL("jar:file:" + getAbsolutePath() + "!/1.dat");
JarURLConnection connection = JarURLConnection.get(url, this.jarFile);
assertThat(connection.getLastModified())
.isEqualTo(connection.getJarEntry().getTime());
}
private String getAbsolutePath() {
return this.rootJarFile.getAbsolutePath().replace('\\', '/');
}