protected function _invokeCallable($callable, $args)
    {
        if (!is_callable($callable)) {
            throw $this->_createInvalidArgumentException($this->__('Callable is not callable'), null, null, $callable);
        }

        $args = $this->_normalizeArray($args);

        try {
            $reflection = $this->_createReflectionForCallable($callable);
            $params     = $reflection->getParameters();
            $this->_validateParams($args, $params);
        } catch (RootException $e) {
            throw $this->_createInvocationException($this->__('Could not invoke callable'), null, $e, $callable, $args);
        }

        // Invoke the callable
        try {
            if ($reflection instanceof ReflectionMethod) {
                if (is_object($callable)) {
                    $target = $callable;
                } else {
                    $target = is_object($callable[0])
                        ? $callable[0]
                        : null;
                }

                return $reflection->invokeArgs($target, $args);
            } else {
                return call_user_func_array($callable, $args);
            }
        } catch (RootException $e) {
            throw $this->_createInternalException(
                $this->__('There was an error during invocation'),
                null,
                $e
            );
        }
    }