You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Dennis Lundberg (JIRA)" <ji...@apache.org> on 2009/12/29 18:10:29 UTC

[jira] Updated: (LOGGING-45) Default LogFactory Implementation fails for Log4J : ClassCastException

     [ https://issues.apache.org/jira/browse/LOGGING-45?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Dennis Lundberg updated LOGGING-45:
-----------------------------------

    Fix Version/s: 1.0.3

> Default LogFactory Implementation fails for Log4J : ClassCastException
> ----------------------------------------------------------------------
>
>                 Key: LOGGING-45
>                 URL: https://issues.apache.org/jira/browse/LOGGING-45
>             Project: Commons Logging
>          Issue Type: Bug
>    Affects Versions: 1.0
>         Environment: Operating System: other
> Platform: Other
>            Reporter: Jerome Jacobsen
>             Fix For: 1.0.3
>
>
> I've got Log4J 1.1.3 JAR in my classpath.  Upon startup of my application 
> (actually a JUnit test case), I immediately get:
> java.lang.ExceptionInInitializerError: 
> org.apache.commons.logging.LogConfigurationException: 
> java.lang.ClassCastException
> So I downloaded the Commons Logging 1.0 source and debugged.  The problem is in 
> org.apache.commons.logging.impl.LogFactoryImpl.guessConfig().
> Class proxyClass=findClassLoader().
>   loadClass( "org.apache.commons.logging.Log4jFactory" );
> The above loadClass call should be changed to:
> Class proxyClass=findClassLoader().
>   loadClass( "org.apache.commons.logging.impl.Log4jFactory" );
> However, after I make the above change I still get a ClassCastException, now 
> from org.apache.commons.logging.LogFactory.newFactory().  This exception  
> baffles me.  It happens at: 
> return (LogFactory) clazz.newInstance();
> So I modify newFactory() to do the newInstance() and the return in two steps 
> instead of one.
> Object result = clazz.newInstance();
> return (LogFactory)result;
> The exception occurs during the cast of result.  If I print result's class name 
> I get org.apache.commons.logging.impl.LogFactoryImpl.  But checking if result 
> is an instanceof org.apache.commons.logging.impl.LogFactoryImpl returns false.
> Object result = clazz.newInstance();
> System.out.println("Got Factory: " + result.getClass().getName());
> if (result instanceof LogFactory) {
>   System.out.println("result is a LogFactory");
> }
> if (result instanceof org.apache.commons.logging.impl.LogFactoryImpl) {
>   System.out.println("result is a LogFactoryImpl");
> }
> return (LogFactory) result;
> The code above just prints:
> Got Factory: org.apache.commons.logging.impl.LogFactoryImpl
> And then throws the ClassCastException.  I'm confused.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.