class JavaExecutor implements Executor {

    Object execute(String className, String methodName, JavaExecutionParametersProvider parametersProvider) {
        ClassLoader origCL = Thread.currentThread().getContextClassLoader();
        try {
            Thread.currentThread().setContextClassLoader(classLoader);
            Class actionClass = getActionClass(className);
            Method executionMethod = getMethodByName(actionClass, methodName);

            Object[] executionParameters = parametersProvider.getExecutionParameters(executionMethod);
            Object[] transformedExecutionParameters = transformExecutionParameters(executionParameters,
                    executionMethod);

            return executionMethod.invoke(actionClass.newInstance(), transformedExecutionParameters);
        } catch (Exception e) {
            throw new RuntimeException(
                    "Method [" + methodName + "] invocation of class [" + className + "] failed: " + e.getMessage(), e);
        } finally {
            Thread.currentThread().setContextClassLoader(origCL);
        }
    }

      JavaExecutor(Set<String> filePaths);

}