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.