View Javadoc

1   /* $Id: SimpleReflectingMbeanInvocation.java 4012 2005-12-14 18:08:08Z dbernstein $
2    *
3    * (Created on Dec 12, 2005
4    *
5    * Copyright (C) 2005 Internet Archive.
6    *  
7    * This file is part of the Heritrix Cluster Controller (crawler.archive.org).
8    *  
9    * HCC is free software; you can redistribute it and/or modify
10   * it under the terms of the GNU Lesser Public License as published by
11   * the Free Software Foundation; either version 2.1 of the License, or
12   * any later version.
13   * 
14   * Heritrix is distributed in the hope that it will be useful, 
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU Lesser Public License for more details.
18   * 
19   * You should have received a copy of the GNU Lesser Public License
20   * along with Heritrix; if not, write to the Free Software
21   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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  }