Author: rony
Date: Sun Jan 29 15:51:12 2012
New Revision: 1237318

URL: http://svn.apache.org/viewvc?rev=1237318&view=rev
Log:
issue [BSF-37]

Modified:
    commons/proper/bsf/trunk/src/main/java/org/apache/bsf/BSF_Log.java

Modified: commons/proper/bsf/trunk/src/main/java/org/apache/bsf/BSF_Log.java
URL: 
http://svn.apache.org/viewvc/commons/proper/bsf/trunk/src/main/java/org/apache/bsf/BSF_Log.java?rev=1237318&r1=1237317&r2=1237318&view=diff
==============================================================================
--- commons/proper/bsf/trunk/src/main/java/org/apache/bsf/BSF_Log.java 
(original)
+++ commons/proper/bsf/trunk/src/main/java/org/apache/bsf/BSF_Log.java Sun Jan 
29 15:51:12 2012
@@ -36,6 +36,9 @@ import  java.lang.reflect.*;
 
 /* ---rgf, 2007-01-29, loading and invoking all methods via reflection
    ---rgf, 2007-09-17, adjusted for using default class loader, if system 
class loader fails
+   ---rgf, 2011-01-08, cf. [https://issues.apache.org/jira/browse/BSF-37]
+                       - context class loader may not be set, account for it 
(2009-09-10)
+                       - fix logic error if context class loader is not set 
(e.g. observed on MacOSX, 2011-01-08)
 */
 
 //@Immutable
@@ -72,7 +75,7 @@ public class BSF_Log // implements org.a
         Class oac_LogFactory_ = null;
         //NOTUSED Method oac_LogFactoryGetLog_Clazz_ = null;
         Method oac_LogFactoryGetLog_String_ = null;
-        
+
         try     // rgf, 20070917: o.k., if not found, try definedClassLoader 
instead
         {
             ClassLoader cl= Thread.currentThread().getContextClassLoader();
@@ -80,17 +83,23 @@ public class BSF_Log // implements org.a
             String str4Log="org.apache.commons.logging.Log";
 
             Class logClass = null;
-            try {
-                logClass        = cl.loadClass(str4Log);
+
+            if (cl!=null)   // use current Thread's context class loader, if 
set
+            {
+                try {
+                    logClass        = cl.loadClass(str4Log);
+                }
+                catch (ClassNotFoundException e1) // not found by 
contextClassLoader
+                {}
             }
-            catch (ClassNotFoundException e1) // not found by 
contextClassLoader
-            {                                 // try defined class loader 
instead
+
+            if (logClass==null)   // not found, try defined class loader 
instead
+            {
                 ClassLoader defCL=BSFManager.getDefinedClassLoader();
                 logClass = defCL.loadClass(str4Log);
                 cl=defCL;       // class found, hence we use the 
definedClassLoader here
             }
 
-            
             oac_LogFactory_ = 
cl.loadClass("org.apache.commons.logging.LogFactory");
 
                 // get method with Class object argument
@@ -122,14 +131,16 @@ public class BSF_Log // implements org.a
         catch (ClassNotFoundException e)// o.k., so we do not use 
org.apache.commons.logging in this run
         {
             if (iDebug>1) e.printStackTrace();
-            //TODO - should we set oac_LogFactory=null here?
+            oac_LogFactory_=null;              // make sure it does not get 
used
+            oac_LogFactoryGetLog_String_=null; // make sure it does not get 
used
         }
         catch (NoSuchMethodException  e)// o.k., so we do not use 
org.apache.commons.logging in this run
         {
             if (iDebug>1) e.printStackTrace();
-            //TODO - should we set oac_LogFactory=null here?
+            oac_LogFactory_=null;              // make sure it does not get 
used
+            oac_LogFactoryGetLog_String_=null; // make sure it does not get 
used
         }
-        
+
         // Set up final fields
         oac_LogFactory = oac_LogFactory_;
         //NOTUSED oac_LogFactoryGetLog_Clazz = oac_LogFactoryGetLog_Clazz_;


Reply via email to