1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.archive.hcc.util.jmx;
24
25 import java.lang.reflect.InvocationTargetException;
26 import java.lang.reflect.Method;
27
28 import javax.management.MBeanException;
29 import javax.management.MBeanParameterInfo;
30 import javax.management.ReflectionException;
31 import javax.management.openmbean.OpenMBeanOperationInfo;
32
33 public class SimpleReflectingMbeanInvocation implements
34 MBeanInvocation {
35 private Object target;
36
37 private OpenMBeanOperationInfo info;
38
39 private Object[] params;
40
41 public SimpleReflectingMbeanInvocation(
42 Object target,
43 OpenMBeanOperationInfo info,
44 Object[] params) {
45 super();
46 this.target = target;
47 this.info = info;
48 this.params = params;
49 }
50
51 public Object invoke() throws MBeanException, ReflectionException {
52
53 try {
54 Method method = target.getClass().getMethod(
55 info.getName(),
56 convertSignature(info));
57
58 return method.invoke(this.target, params);
59 } catch (SecurityException e) {
60 e.printStackTrace();
61 throw new ReflectionException(e);
62 } catch (NoSuchMethodException e) {
63 e.printStackTrace();
64 throw new ReflectionException(e);
65 } catch (ClassNotFoundException e) {
66 e.printStackTrace();
67 throw new ReflectionException(e);
68 } catch (IllegalAccessException e) {
69 e.printStackTrace();
70 throw new ReflectionException(e);
71 } catch (InvocationTargetException e) {
72 e.printStackTrace();
73 throw new MBeanException(e);
74 }
75 }
76
77 private static Class[] convertSignature(OpenMBeanOperationInfo info)
78 throws ClassNotFoundException {
79 MBeanParameterInfo[] params = info.getSignature();
80 Class[] classes = new Class[params.length];
81 for (int i = 0; i < params.length; i++) {
82 String theType = params[i].getType();
83 Class c = Class.forName(theType);
84 classes[i] = c;
85 }
86
87 return classes;
88 }
89
90 }