code: protected Object invoke(final Object obj, final String method, final Object[] args)
  		throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
  	{
  		final Class<?>[] c = new Class<?>[args.length];
  		for (int i = 0; i < c.length; ++i) {
  			c[i] = args[i].getClass();
  			if (c[i] == Integer.class)
  				c[i] = int.class;
  		}
  		try {
  			if (obj instanceof Class)
  				return ((Class<?>) obj).getMethod(method, c).invoke(null, args);
  			return obj.getClass().getMethod(method, c).invoke(obj, args);
  		}
  		catch (final IllegalArgumentException e) {
  			throw new IllegalArgumentException("illegal argument on invoking "
  					+ obj.getClass().getName() + "." + method + ": " + e.getMessage());
  		}
  	}
docs: Invokes <code>method</code> name on object <code>obj</code> with arguments <code>args</code>.
  <p>
  Arguments wrapped in an object of type Integer are replaced with the primitive int type when
  looking up the method name.
  
  @param obj object on which to invoke the method
  @param method method name
  @param args list of arguments
  @return the result of the invoked method
  @throws NoSuchMethodException if a matching method is not found
  @throws IllegalAccessException if <code>method</code> is inaccessible
  @throws InvocationTargetException if the invoked method throws an exception
  @see Class#getMethod(String, Class[])
  @see Method#invoke(Object, Object[])