[jboss-cvs] JBossAS SVN: r86443 - projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sat Mar 28 15:09:20 EDT 2009


Author: alesj
Date: 2009-03-28 15:09:19 -0400 (Sat, 28 Mar 2009)
New Revision: 86443

Modified:
   projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java
Log:
Check result.

Modified: projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java
===================================================================
--- projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java	2009-03-28 18:38:15 UTC (rev 86442)
+++ projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java	2009-03-28 19:09:19 UTC (rev 86443)
@@ -59,7 +59,7 @@
       try
       {
          Method getPolicy = getMethod(BaseClassLoader.class, "getPolicy");
-         policy = (ClassLoaderPolicy)getPolicy.invoke(classLoader);
+         policy = invokeMethod(getPolicy, classLoader, ClassLoaderPolicy.class);
          try
          {
             // let's check if we have a patched policy, with translator per policy
@@ -70,9 +70,9 @@
             log.info("Policy doesn't have setTranslator, falling back to ClassLoaderSystem.");
 
             Method getClassLoaderDomain = getMethod(BaseClassLoaderPolicy.class, "getClassLoaderDomain");
-            BaseClassLoaderDomain domain = (BaseClassLoaderDomain)getClassLoaderDomain.invoke(policy);
+            BaseClassLoaderDomain domain = invokeMethod(getClassLoaderDomain, policy, BaseClassLoaderDomain.class);
             Method getClassLoaderSystem = getMethod(BaseClassLoaderDomain.class, "getClassLoaderSystem");
-            BaseClassLoaderSystem system = (BaseClassLoaderSystem)getClassLoaderSystem.invoke(domain);
+            BaseClassLoaderSystem system = invokeMethod(getClassLoaderSystem, domain, BaseClassLoaderSystem.class);
             if (system instanceof ClassLoaderSystem)
             {
                this.system = ClassLoaderSystem.class.cast(system);
@@ -97,13 +97,32 @@
     * @return declared method
     * @throws Exception for any error
     */
-   private Method getMethod(Class<?> clazz, String name) throws Exception
+   private static Method getMethod(Class<?> clazz, String name) throws Exception
    {
       Method method = clazz.getDeclaredMethod(name);
       method.setAccessible(true);
       return method;
    }
 
+   /**
+    * Invoke method and check the result.
+    *
+    * @param method the method
+    * @param target the target
+    * @param expectedType the expected type
+    * @param <T> the exact type
+    * @return invocation's result
+    * @throws Exception for any error
+    */
+   private static <T> T invokeMethod(Method method, Object target, Class<T> expectedType) throws Exception
+   {
+      Object result = method.invoke(target);
+      if (expectedType.isInstance(result) == false)
+         throw new IllegalArgumentException("Returned result must be instance of [" + expectedType.getName() + "]");
+
+      return expectedType.cast(result);
+   }
+
    public void addTransformer(ClassFileTransformer transformer)
    {
       Assert.notNull(transformer, "ClassFileTransformer must not be null");




More information about the jboss-cvs-commits mailing list