From 7c7259beececc360f8be68fbce3b615de807bc48 Mon Sep 17 00:00:00 2001 From: "rostislav.dudka" Date: Fri, 28 Jul 2017 15:16:15 +0300 Subject: [PATCH 1/2] Make JarURLConnection return entry's last modified time See gh-9893 --- .../boot/loader/jar/JarURLConnection.java | 16 ++++++++++++++++ .../boot/loader/jar/JarURLConnectionTests.java | 9 +++++++++ 2 files changed, 25 insertions(+) diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java index 584bce227cd..6630634b16f 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java @@ -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); } diff --git a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java index 15c6df1a648..ea73baf41ea 100644 --- a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java +++ b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/JarURLConnectionTests.java @@ -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('\\', '/'); } From b7ac5f2eb2c9628e6c41787f7246f0f9b7b1babd Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 28 Jul 2017 15:40:25 +0100 Subject: [PATCH 2/2] Polish "Make JarURLConnection return entry's last modified time" Closes gh-9893 --- .../springframework/boot/loader/jar/JarURLConnection.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java index 6630634b16f..e44123cbfe6 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/JarURLConnection.java @@ -237,16 +237,15 @@ final class JarURLConnection extends java.net.JarURLConnection { @Override public long getLastModified() { - int defaultTime = 0; if (this.jarFile == null || this.jarEntryName.isEmpty()) { - return defaultTime; + return 0; } try { JarEntry entry = getJarEntry(); - return (entry == null ? defaultTime : entry.getTime()); + return (entry == null ? 0 : entry.getTime()); } catch (IOException ex) { - return defaultTime; + return 0; } }