1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.hadoop.hbase.util;
22
23 import java.lang.reflect.InvocationTargetException;
24 import java.lang.reflect.Method;
25 import java.lang.reflect.UndeclaredThrowableException;
26
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.logging.LogFactory;
29
30 public class Methods {
31 private static Log LOG = LogFactory.getLog(Methods.class);
32
33 public static <T> Object call(Class<T> clazz, T instance, String methodName,
34 Class[] types, Object[] args) throws Exception {
35 try {
36 Method m = clazz.getMethod(methodName, types);
37 return m.invoke(instance, args);
38 } catch (IllegalArgumentException arge) {
39 LOG.fatal("Constructed invalid call. class="+clazz.getName()+
40 " method=" + methodName + " types=" + Classes.stringify(types), arge);
41 throw arge;
42 } catch (NoSuchMethodException nsme) {
43 throw new IllegalArgumentException(
44 "Can't find method "+methodName+" in "+clazz.getName()+"!", nsme);
45 } catch (InvocationTargetException ite) {
46
47 if (ite.getTargetException() != null) {
48 if (ite.getTargetException() instanceof Exception) {
49 throw (Exception)ite.getTargetException();
50 } else if (ite.getTargetException() instanceof Error) {
51 throw (Error)ite.getTargetException();
52 }
53 }
54 throw new UndeclaredThrowableException(ite,
55 "Unknown exception invoking "+clazz.getName()+"."+methodName+"()");
56 } catch (IllegalAccessException iae) {
57 throw new IllegalArgumentException(
58 "Denied access calling "+clazz.getName()+"."+methodName+"()", iae);
59 } catch (SecurityException se) {
60 LOG.fatal("SecurityException calling method. class="+clazz.getName()+
61 " method=" + methodName + " types=" + Classes.stringify(types), se);
62 throw se;
63 }
64 }
65 }