From 7f0048a899b8313edea3b3fa3f96691449519cbe Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 20 Dec 2017 22:58:57 -0800 Subject: [PATCH] Use fast exceptions when enumerating resources Update the `LaunchedURLClassLoader` used for fat jar support so that each iteration on a `findResources` result also allows for fast exceptions. Fixes gh-11406 --- .../boot/loader/LaunchedURLClassLoader.java | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java index 25a9e6f4ba..9755d0317d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java @@ -65,7 +65,7 @@ public class LaunchedURLClassLoader extends URLClassLoader { public Enumeration findResources(String name) throws IOException { Handler.setUseFastConnectionExceptions(true); try { - return super.findResources(name); + return new UseFastConnectionExceptionsEnumeration(super.findResources(name)); } finally { Handler.setUseFastConnectionExceptions(false); @@ -182,4 +182,38 @@ public class LaunchedURLClassLoader extends URLClassLoader { } } + private static class UseFastConnectionExceptionsEnumeration + implements Enumeration { + + private final Enumeration delegate; + + UseFastConnectionExceptionsEnumeration(Enumeration delegate) { + this.delegate = delegate; + } + + @Override + public boolean hasMoreElements() { + Handler.setUseFastConnectionExceptions(true); + try { + return this.delegate.hasMoreElements(); + } + finally { + Handler.setUseFastConnectionExceptions(false); + } + + } + + @Override + public URL nextElement() { + Handler.setUseFastConnectionExceptions(true); + try { + return this.delegate.nextElement(); + } + finally { + Handler.setUseFastConnectionExceptions(false); + } + } + + } + }