[jboss-svn-commits] JBoss Common SVN: r3131 - common-core/trunk/src/main/java/org/jboss/util/builder.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Apr 30 08:41:47 EDT 2009


Author: thomas.diesler at jboss.com
Date: 2009-04-30 08:41:46 -0400 (Thu, 30 Apr 2009)
New Revision: 3131

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

Modified: common-core/trunk/src/main/java/org/jboss/util/builder/AbstractBuilder.java
===================================================================
--- common-core/trunk/src/main/java/org/jboss/util/builder/AbstractBuilder.java	2009-04-30 12:35:13 UTC (rev 3130)
+++ common-core/trunk/src/main/java/org/jboss/util/builder/AbstractBuilder.java	2009-04-30 12:41:46 UTC (rev 3131)
@@ -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