This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch release-2.x in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit e1d06248930f7aaa3d41186f9856eef50991a071 Author: Gary Gregory <[email protected]> AuthorDate: Sat Jan 8 14:58:17 2022 -0500 Only check if log4j-core is available once. --- .../main/java/org/apache/log4j/helpers/Loader.java | 99 +++++++--------------- 1 file changed, 29 insertions(+), 70 deletions(-) diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/Loader.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/Loader.java index 9e8ed40..cf5ca22 100644 --- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/Loader.java +++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/Loader.java @@ -5,9 +5,9 @@ * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -17,9 +17,6 @@ package org.apache.log4j.helpers; -import java.io.InterruptedIOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.net.URL; /** @@ -29,22 +26,10 @@ public class Loader { static final String TSTR = "Caught Exception while in Loader.getResource. This may be innocuous."; - // We conservatively assume that we are running under Java 1.x - static private boolean java1 = true; - - static private boolean ignoreTCL = false; + static private boolean ignoreTCL; static { - String prop = OptionConverter.getSystemProperty("java.version", null); - - if (prop != null) { - int i = prop.indexOf('.'); - if (i != -1) { - if (prop.charAt(i + 1) != '1') - java1 = false; - } - } - String ignoreTCLProp = OptionConverter.getSystemProperty("log4j.ignoreTCL", null); + final String ignoreTCLProp = OptionConverter.getSystemProperty("log4j.ignoreTCL", null); if (ignoreTCLProp != null) { ignoreTCL = OptionConverter.toBoolean(ignoreTCLProp, true); } @@ -55,21 +40,19 @@ public class Loader { * <ol> * <p> * <li>Search for <code>resource</code> using the thread context class loader under Java2. If that fails, search for - * <code>resource</code> using the class loader that loaded this class (<code>Loader</code>). Under JDK 1.1, only the - * the class loader that loaded this class (<code>Loader</code>) is used. + * <code>resource</code> using the class loader that loaded this class (<code>Loader</code>). * </p> * <p> - * <li>Try one last time with <code>ClassLoader.getSystemResource(resource)</code>, that is is using the system class - * loader in JDK 1.2 and virtual machine's built-in class loader in JDK 1.1. + * <li>Try one last time with <code>ClassLoader.getSystemResource(resource)</code>. * </p> * </ol> */ - static public URL getResource(String resource) { + static public URL getResource(final String resource) { ClassLoader classLoader = null; URL url = null; try { - if (!java1 && !ignoreTCL) { + if (!ignoreTCL) { classLoader = getTCL(); if (classLoader != null) { LogLog.debug("Trying to find [" + resource + "] using context classloader " + classLoader + "."); @@ -81,7 +64,7 @@ public class Loader { } // We could not find resource. Ler us now try with the - // classloader that loaded this class. + // ClassLoader that loaded this class. classLoader = Loader.class.getClassLoader(); if (classLoader != null) { LogLog.debug("Trying to find [" + resource + "] using " + classLoader + " class loader."); @@ -90,15 +73,7 @@ public class Loader { return url; } } - } catch (IllegalAccessException t) { - LogLog.warn(TSTR, t); - } catch (InvocationTargetException t) { - if (t.getTargetException() instanceof InterruptedException || t.getTargetException() instanceof InterruptedIOException) { - Thread.currentThread().interrupt(); - } - LogLog.warn(TSTR, t); - } catch (Throwable t) { - // + } catch (final Throwable t) { // can't be InterruptedException or InterruptedIOException // since not declared, must be error or RuntimeError. LogLog.warn(TSTR, t); @@ -113,66 +88,50 @@ public class Loader { } /** - * Get a resource by delegating to getResource(String). - * + * Gets a resource by delegating to getResource(String). + * * @param resource resource name * @param clazz class, ignored. * @return URL to resource or null. * @deprecated as of 1.2. */ @Deprecated - public static URL getResource(String resource, Class clazz) { + public static URL getResource(final String resource, final Class clazz) { return getResource(resource); } /** - * Get the Thread Context Loader which is a JDK 1.2 feature. If we are running under JDK 1.1 or anything else goes wrong - * the method returns <code>null<code>. - * + * Shorthand for {@code Thread.currentThread().getContextClassLoader()}. */ - private static ClassLoader getTCL() throws IllegalAccessException, InvocationTargetException { - - // Are we running on a JDK 1.2 or later system? - Method method = null; - try { - method = Thread.class.getMethod("getContextClassLoader", (Class<?>[]) null); - } catch (NoSuchMethodException e) { - // We are running on JDK 1.1 - return null; - } - - return (ClassLoader) method.invoke(Thread.currentThread(), (Object[]) null); + private static ClassLoader getTCL() { + return Thread.currentThread().getContextClassLoader(); } /** - * Are we running under JDK 1.x? + * Always returns false since Java 1.x support is long gone. + * + * @return Always false. */ public static boolean isJava1() { - return java1; + return false; } /** - * If running under JDK 1.2 load the specified class using the <code>Thread</code> <code>contextClassLoader</code> if - * that fails try Class.forname. Under JDK 1.1 only Class.forName is used. + * Loads the specified class using the <code>Thread</code> <code>contextClassLoader</code>, if that fails try + * Class.forname. * + * @param clazz The class to load. + * @return The Class. + * @throws ClassNotFoundException Never thrown, declared for compatibility. */ - static public Class loadClass(String clazz) throws ClassNotFoundException { - // Just call Class.forName(clazz) if we are running under JDK 1.1 - // or if we are instructed to ignore the TCL. - if (java1 || ignoreTCL) { + static public Class loadClass(final String clazz) throws ClassNotFoundException { + // Just call Class.forName(clazz) if we are instructed to ignore the TCL. + if (ignoreTCL) { return Class.forName(clazz); } try { return getTCL().loadClass(clazz); - } - // we reached here because tcl was null or because of a - // security exception, or because clazz could not be loaded... - // In any case we now try one more time - catch (InvocationTargetException e) { - if (e.getTargetException() instanceof InterruptedException || e.getTargetException() instanceof InterruptedIOException) { - Thread.currentThread().interrupt(); - } - } catch (Throwable t) { + } catch (final Throwable t) { // ignore } return Class.forName(clazz);
