code: public static Object invokeStaticMethod(final Class<?> cls, final String methodName,
              Object[] args, Class<?>[] parameterTypes)
              throws NoSuchMethodException, IllegalAccessException,
              InvocationTargetException {
          args = ArrayUtils.nullToEmpty(args);
          parameterTypes = ArrayUtils.nullToEmpty(parameterTypes);
          final Method method = getMatchingAccessibleMethod(cls, methodName,
                  parameterTypes);
          if (method == null) {
              throw new NoSuchMethodException("No such accessible method: "
                      + methodName + "() on class: " + cls.getName());
          }
          args = toVarArgs(method, args);
          return method.invoke(null, args);
      }
docs: <p>Invokes a named {@code static} method whose parameter type matches the object type.</p>
  
  <p>This method delegates the method search to {@link #getMatchingAccessibleMethod(Class, String, Class[])}.</p>
  
  <p>This method supports calls to methods taking primitive parameters
  via passing in wrapping classes. So, for example, a {@code Boolean} class
  would match a {@code boolean} primitive.</p>
  
  
  @param cls invoke static method on this class
  @param methodName get method with this name
  @param args use these arguments - treat {@code null} as empty array
  @param parameterTypes match these parameters - treat {@code null} as empty array
  @return The value returned by the invoked method
  
  @throws NoSuchMethodException if there is no such accessible method
  @throws InvocationTargetException wraps an exception thrown by the
  method invoked
  @throws IllegalAccessException if the requested method is not accessible
  via reflection