You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/10/14 20:07:31 UTC
incubator-freemarker git commit: (Some code cleanup)
Repository: incubator-freemarker
Updated Branches:
refs/heads/2.3-gae d2a26061e -> e726cd243
(Some code cleanup)
Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/e726cd24
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/e726cd24
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/e726cd24
Branch: refs/heads/2.3-gae
Commit: e726cd243aa1fccda60d26f8a791782a6f9d062c
Parents: d2a2606
Author: ddekany <dd...@apache.org>
Authored: Sat Oct 14 22:07:23 2017 +0200
Committer: ddekany <dd...@apache.org>
Committed: Sat Oct 14 22:07:23 2017 +0200
----------------------------------------------------------------------
.../freemarker/template/utility/ClassUtil.java | 23 +++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/e726cd24/src/main/java/freemarker/template/utility/ClassUtil.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/template/utility/ClassUtil.java b/src/main/java/freemarker/template/utility/ClassUtil.java
index 6b262f5..66944fe 100644
--- a/src/main/java/freemarker/template/utility/ClassUtil.java
+++ b/src/main/java/freemarker/template/utility/ClassUtil.java
@@ -25,7 +25,6 @@ import java.net.URL;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
-import java.util.zip.ZipException;
import freemarker.core.Environment;
import freemarker.core.Macro;
@@ -387,7 +386,10 @@ public class ClassUtil {
/**
* Very similar to {@link Class#getResourceAsStream(String)}, but throws {@link IOException} instead of returning
* {@code null} if {@code optional} is {@code false}, and attempts to work around "IllegalStateException: zip file
- * closed" and related issues (caused by bugs outside of FreeMarker).
+ * closed" and similar {@code sun.net.www.protocol.jar.JarURLConnection}-related glitches. These are caused by bugs
+ * outside of FreeMarker. Note that in cases where the JAR resource becomes broken concurrently, similar errors can
+ * still occur later when the {@link InputStream} is read ({@link #loadProperties(Class, String)} works that
+ * around as well).
*
* @return If {@code optional} is {@code false}, it's never {@code null}, otherwise {@code null} indicates that the
* resource doesn't exist.
@@ -400,6 +402,7 @@ public class ClassUtil {
throws IOException {
InputStream ins;
try {
+ // This is how we did this earlier. May uses some JarURLConnection caches, which leads to the problems.
ins = baseClass.getResourceAsStream(resource);
} catch (Exception e) {
// Workaround for "IllegalStateException: zip file closed", and other related exceptions. This happens due
@@ -421,6 +424,7 @@ public class ClassUtil {
*/
public static InputStream getReasourceAsStream(ClassLoader classLoader, String resource, boolean optional)
throws IOException {
+ // See source commends in the other overload of this method.
InputStream ins;
try {
ins = classLoader.getResourceAsStream(resource);
@@ -437,7 +441,7 @@ public class ClassUtil {
/**
* Loads a class loader resource into a {@link Properties}; tries to work around "zip file closed" and related
- * errors.
+ * {@code sun.net.www.protocol.jar.JarURLConnection} glitches.
*
* @since 2.3.27
*/
@@ -447,6 +451,7 @@ public class ClassUtil {
InputStream ins = null;
try {
try {
+ // This is how we did this earlier. May uses some JarURLConnection caches, which leads to the problems.
ins = baseClass.getResourceAsStream(resource);
} catch (Exception e) {
throw new MaybeZipFileClosedException();
@@ -456,6 +461,13 @@ public class ClassUtil {
props.load(ins);
} catch (Exception e) {
throw new MaybeZipFileClosedException();
+ } finally {
+ try {
+ ins.close();
+ } catch (Exception e) {
+ // Do nothing to suppress "ZipFile closed" and related exceptions.
+ }
+ ins = null;
}
} catch (MaybeZipFileClosedException e) {
// Workaround for "zip file closed" exception, and other related exceptions. This happens due to bugs
@@ -468,8 +480,8 @@ public class ClassUtil {
if (ins != null) {
try {
ins.close();
- } catch (ZipException e) {
- // Do nothing to suppress "ZipFile closed" exceptions.
+ } catch (Exception e) {
+ // Do nothing to suppress "ZipFile closed" and related exceptions.
}
}
}
@@ -484,6 +496,7 @@ public class ClassUtil {
}
}
+ /** Used internally to work around some JarURLConnection glitches */
private static class MaybeZipFileClosedException extends Exception {
//
}