code: public static Object executeMethod(Object aObject, String methodName, Object[] aArguments)
     throws Exception
     {
  	Class<?>[] parameterTypes = null;
  	ArrayList<Object> parameterTypeArrayList = null;
  	
  	if(aArguments != null && aArguments.length >0)
  	{
  	   
  	   //get array of inputs
  	   
  	     parameterTypeArrayList = new ArrayList<Object>(aArguments.length);
  	         
  	     for (int i = 0; i < aArguments.length; i++)
  	     {
  		  if(aArguments[i] == null)
  		  {
  		     //TODO: throw new RequiredException("argument["+i+"]");
  		     parameterTypeArrayList.add(Object.class);
  		  }
  		  else
  		  {
  		     parameterTypeArrayList.add(aArguments[i].getClass());   
  		  }
  		  
  		  
  	     }
  	     	     
  	      parameterTypes = (Class[])parameterTypeArrayList.toArray(new Class[parameterTypeArrayList.size()]);  
  	}
        
       
        
        //find method
        Method method = null;
        
  
        method = aObject.getClass().getDeclaredMethod(methodName, parameterTypes);
       
        try
  	{
           return method.invoke(aObject, aArguments);
  	} 
        catch (Exception e)
  	{          
  	   throw new SystemException("methodName="+methodName+" object="+aObject.getClass().getName()+" parameters="+parameterTypeArrayList+" EXCEPTION="+Debugger.stackTrace(e));
  	}
        
     }
docs: Note that this methods does not support auto boxing of primitive types
  @param aObject the object
  @param methodName the method
  @param aArguments the input argument
  @return the object return values
  @throws Exception