[jboss-cvs] JBossAS SVN: r77176 - trunk/ejb3/src/main/org/jboss/ejb3/client.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Aug 18 21:16:51 EDT 2008


Author: scott.stark at jboss.org
Date: 2008-08-18 21:16:51 -0400 (Mon, 18 Aug 2008)
New Revision: 77176

Modified:
   trunk/ejb3/src/main/org/jboss/ejb3/client/JndiPropertyInjector.java
Log:
JBAS-5457, log more info about jndi value class vs field class on IllegalArgumentException

Modified: trunk/ejb3/src/main/org/jboss/ejb3/client/JndiPropertyInjector.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/client/JndiPropertyInjector.java	2008-08-18 23:17:32 UTC (rev 77175)
+++ trunk/ejb3/src/main/org/jboss/ejb3/client/JndiPropertyInjector.java	2008-08-19 01:16:51 UTC (rev 77176)
@@ -21,6 +21,11 @@
  */
 package org.jboss.ejb3.client;
 
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.security.CodeSource;
+import java.security.ProtectionDomain;
+
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
@@ -72,7 +77,23 @@
    {
       Object value = lookup(jndiName);
       log.trace("injecting " + value + " from " + jndiName + " into " + property + " of " + instance);
-      property.set(instance, value);
+      try
+      {
+         property.set(instance, value);
+      }
+      catch(IllegalArgumentException e)
+      {
+         Class c1 = value.getClass();
+         StringBuffer buffer = new StringBuffer("Jndi value '"+jndiName+"' class info:");
+         displayClassInfo(c1, buffer);
+         log.debug("Failed to inject jndi property, "+buffer);
+         Class c2 = property.getType();
+         buffer.setLength(0);
+         buffer.append("Field "+property.getName()+" class info:");
+         displayClassInfo(c2, buffer);
+         log.debug(", "+buffer);
+         throw e;
+      }
    }
 
    protected Object lookup(String jndiName)
@@ -117,4 +138,32 @@
       }
       return dependency;
    }
+
+   static void displayClassInfo(Class clazz, StringBuffer results)
+   {
+      // Print out some codebase info for the ProbeHome
+      ClassLoader cl = clazz.getClassLoader();
+      results.append("\n"+clazz.getName()+".ClassLoader="+cl);
+      CodeSource clazzCS = clazz.getProtectionDomain().getCodeSource();
+      if( clazzCS != null )
+         results.append("\n++++CodeSource: "+clazzCS);
+      else
+         results.append("\n++++Null CodeSource");
+
+      results.append("\nImplemented Interfaces:");
+      Class[] ifaces = clazz.getInterfaces();
+      for(int i = 0; i < ifaces.length; i ++)
+      {
+         results.append("\n++"+ifaces[i]);
+         ClassLoader loader = ifaces[i].getClassLoader();
+         results.append("\n++++ClassLoader: "+loader);
+         ProtectionDomain pd = ifaces[i].getProtectionDomain();
+         CodeSource cs = pd.getCodeSource();
+         if( cs != null )
+            results.append("\n++++CodeSource: "+cs);
+         else
+            results.append("\n++++Null CodeSource");
+      }
+   }
+
 }




More information about the jboss-cvs-commits mailing list