[jboss-svn-commits] JBoss Common SVN: r3130 - in common-core/branches/tdiesler: src/main/java/org/jboss/util/builder and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Apr 30 08:35:13 EDT 2009


Author: thomas.diesler at jboss.com
Date: 2009-04-30 08:35:13 -0400 (Thu, 30 Apr 2009)
New Revision: 3130

Modified:
   common-core/branches/tdiesler/pom.xml
   common-core/branches/tdiesler/src/main/java/org/jboss/util/builder/AbstractBuilder.java
Log:
Report a potential ClassLoader problems in AbstractBuilder

Modified: common-core/branches/tdiesler/pom.xml
===================================================================
--- common-core/branches/tdiesler/pom.xml	2009-04-30 12:17:23 UTC (rev 3129)
+++ common-core/branches/tdiesler/pom.xml	2009-04-30 12:35:13 UTC (rev 3130)
@@ -8,7 +8,9 @@
   <groupId>org.jboss</groupId>   
   <artifactId>jboss-common-core</artifactId>
   <packaging>jar</packaging>
-  <version>2.2.11.GA</version>
+  
+  <version>2.2.11-SNAPSHOT</version>
+  
   <name>JBoss Common Classes</name>
   <url>http://www.jboss.org</url>
   <description>JBoss Common Core Utility classes</description>

Modified: common-core/branches/tdiesler/src/main/java/org/jboss/util/builder/AbstractBuilder.java
===================================================================
--- common-core/branches/tdiesler/src/main/java/org/jboss/util/builder/AbstractBuilder.java	2009-04-30 12:17:23 UTC (rev 3129)
+++ common-core/branches/tdiesler/src/main/java/org/jboss/util/builder/AbstractBuilder.java	2009-04-30 12:35:13 UTC (rev 3130)
@@ -21,6 +21,8 @@
  */
 package org.jboss.util.builder;
 
+// $Id: $
+
 import java.security.PrivilegedAction;
 
 /**
@@ -28,6 +30,7 @@
  * 
  * @param <T> the type to be built
  * @author <a href="adrian at jboss.org">Adrian Brock</a>
+ * @author Thomas.Diesler at jboss.com
  * @version $Revision: 1.1 $
  */
 public class AbstractBuilder<T> implements PrivilegedAction<T>
@@ -57,16 +60,39 @@
    
    public T run()
    {
+      Object object;
       try
       {
          String className = System.getProperty(factoryClass.getName(), defaultFactory);
          Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(className);
-         Object object = clazz.newInstance();
-         return factoryClass.cast(object);
+         object = clazz.newInstance();
       }
       catch (Throwable t)
       {
          throw new RuntimeException("Error constructing " + factoryClass.getName(), t);
       }
+      
+      // Cast the factory instance and report a potential ClassLoader problem
+      T retObj;
+      try
+      {
+         retObj = factoryClass.cast(object);
+      }
+      catch (ClassCastException ex)
+      {
+         String objClassName = object.getClass().getName();
+         ClassLoader objLoader = object.getClass().getClassLoader();
+         
+         String factoryClassName = factoryClass.getName();
+         ClassLoader factoryLoader = factoryClass.getClassLoader();
+         
+         String msg = "Cannot cast object '" + objClassName + "' to factory '" + factoryClassName + "'\n" + 
+         "  factoryLoader: " + factoryLoader + "\n" + 
+         "  objLoader: " + objLoader + "\n";
+         
+         throw new RuntimeException(msg);
+      }
+      
+      return retObj;
    }
 }




More information about the jboss-svn-commits mailing list