org_apache_struts_beanvalidation_BeanValidationInterceptorTest_java
org.apache.commons.logging.impl.LogFactoryImpl
private Log createLogFromClass(String logAdapterClassName, String logCategory, boolean affectState) throws LogConfigurationException {
        if (LogFactoryImpl.isDiagnosticsEnabled()) {
            this.logDiagnostic("Attempting to instantiate '" + logAdapterClassName + "'");
        }
        Object[] params = new Object[]{logCategory};
        Log logAdapter = null;
        Constructor<?> constructor = null;
        Class<?> logAdapterClass = null;
        ClassLoader currentCL = this.getBaseClassLoader();
        while (true) {
            String msg;
            this.logDiagnostic("Trying to load '" + logAdapterClassName + "' from classloader " + LogFactoryImpl.objectId(currentCL));
            try {
                Class<?> c;
                if (LogFactoryImpl.isDiagnosticsEnabled()) {
                    String resourceName = logAdapterClassName.replace('.', '/') + ".class";
                    URL url = currentCL != null ? currentCL.getResource(resourceName) : ClassLoader.getSystemResource(resourceName + ".class");
                    if (url == null) {
                        this.logDiagnostic("Class '" + logAdapterClassName + "' [" + resourceName + "] cannot be found.");
                    } else {
                        this.logDiagnostic("Class '" + logAdapterClassName + "' was found at '" + url + "'");
                    }
                }
                try {
                    c = Class.forName(logAdapterClassName, true, currentCL);
                }
                catch (ClassNotFoundException originalClassNotFoundException) {
                    String msg2 = originalClassNotFoundException.getMessage();
                    this.logDiagnostic("The log adapter '" + logAdapterClassName + "' is not available via classloader " + LogFactoryImpl.objectId(currentCL) + ": " + msg2.trim());
                    try {
                        c = Class.forName(logAdapterClassName);
                    }
                    catch (ClassNotFoundException secondaryClassNotFoundException) {
                        msg2 = secondaryClassNotFoundException.getMessage();
                        this.logDiagnostic("The log adapter '" + logAdapterClassName + "' is not available via the LogFactoryImpl class classloader: " + msg2.trim());
                        break;
                    }
                }
                constructor = c.getConstructor(this.logConstructorSignature);
                Object o = constructor.newInstance(params);
                if (o instanceof Log) {
                    logAdapterClass = c;
                    logAdapter = (Log)o;
                    break;
                }
                this.handleFlawedHierarchy(currentCL, c);
            }
            catch (NoClassDefFoundError e) {
                msg = e.getMessage();
                this.logDiagnostic("The log adapter '" + logAdapterClassName + "' is missing dependencies when loaded via classloader " + LogFactoryImpl.objectId(currentCL) + ": " + msg.trim());
                break;
            }
            catch (ExceptionInInitializerError e) {
                msg = e.getMessage();
                this.logDiagnostic("The log adapter '" + logAdapterClassName + "' is unable to initialize itself when loaded via classloader " + LogFactoryImpl.objectId(currentCL) + ": " + msg.trim());
                break;
            }
            catch (LogConfigurationException e) {
                throw e;
            }
            catch (Throwable t) {
                LogFactoryImpl.handleThrowable((Throwable)t);
                this.handleFlawedDiscovery(logAdapterClassName, currentCL, t);
            }
            if (currentCL == null) break;
            currentCL = this.getParentClassLoader(currentCL);
        }
        if (logAdapterClass != null && affectState) {
            this.logClassName = logAdapterClassName;
            this.logConstructor = constructor;
            try {
                this.logMethod = logAdapterClass.getMethod("setLogFactory", this.logMethodSignature);
                this.logDiagnostic("Found method setLogFactory(LogFactory) in '" + logAdapterClassName + "'");
            }
            catch (Throwable t) {
                LogFactoryImpl.handleThrowable((Throwable)t);
                this.logMethod = null;
                this.logDiagnostic("[INFO] '" + logAdapterClassName + "' from classloader " + LogFactoryImpl.objectId(currentCL) + " does not declare optional method " + "setLogFactory(LogFactory)");
            }
            this.logDiagnostic("Log adapter '" + logAdapterClassName + "' from classloader " + LogFactoryImpl.objectId(logAdapterClass.getClassLoader()) + " has been selected for use.");
        }
        return logAdapter;
    }
 -> java.lang.Class.getClassLoader(): java.lang.ClassLoader -> java.security.AccessController.doPrivileged(java.security.PrivilegedAction): java.lang.Object -> java.lang.Thread.getContextClassLoader(): java.lang.ClassLoader -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.Object.getClass(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.System.identityHashCode(java.lang.Object): int -> java.lang.StringBuffer.append(int): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String -> java.lang.Class.forName(java.lang.String,boolean,java.lang.ClassLoader): java.lang.Class -> java.lang.Class.getConstructor(java.lang.Class[]): java.lang.reflect.Constructor -> java.lang.reflect.Constructor.newInstance(java.lang.Object[]): java.lang.Object -> java.util.logging.Logger.getLogger(java.lang.String): java.util.logging.Logger -> java.lang.Class.getMethod(java.lang.String,java.lang.Class[]): java.lang.reflect.Method -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.Object.getClass(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.System.identityHashCode(java.lang.Object): int -> java.lang.StringBuffer.append(int): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.Class.getClassLoader(): java.lang.ClassLoader -> java.lang.Object.getClass(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.System.identityHashCode(java.lang.Object): int -> java.lang.StringBuffer.append(int): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String
 [CALL] [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] [CALL] -> java.lang.Class.getClassLoader(): java.lang.ClassLoader [EXIT] [EXIT] [CALL] -> java.security.AccessController.doPrivileged(java.security.PrivilegedAction): java.lang.Object [CALL] [CALL] [CALL] -> java.lang.Thread.getContextClassLoader(): java.lang.ClassLoader [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [EXIT] -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer [CALL] -> java.lang.Object.getClass(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.System.identityHashCode(java.lang.Object): int -> java.lang.StringBuffer.append(int): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String [EXIT] -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] -> java.lang.Class.forName(java.lang.String,boolean,java.lang.ClassLoader): java.lang.Class -> java.lang.Class.getConstructor(java.lang.Class[]): java.lang.reflect.Constructor -> java.lang.reflect.Constructor.newInstance(java.lang.Object[]): java.lang.Object [CALL] [CALL] -> java.util.logging.Logger.getLogger(java.lang.String): java.util.logging.Logger [EXIT] [EXIT] -> java.lang.Class.getMethod(java.lang.String,java.lang.Class[]): java.lang.reflect.Method [CALL] [EXIT] -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer [CALL] -> java.lang.Object.getClass(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.System.identityHashCode(java.lang.Object): int -> java.lang.StringBuffer.append(int): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String [EXIT] -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.Class.getClassLoader(): java.lang.ClassLoader [CALL] -> java.lang.Object.getClass(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.System.identityHashCode(java.lang.Object): int -> java.lang.StringBuffer.append(int): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String [EXIT] -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.append(java.lang.String): java.lang.StringBuffer -> java.lang.StringBuffer.toString(): java.lang.String [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT]