protected virtual object InvokeListenerMethod(string methodName, object[] arguments, IMessage originalMessage)
        {
            try
            {
                var methodInvoker = new MethodInvoker();
                methodInvoker.SetTargetObject(Instance);
                methodInvoker.TargetMethod = methodName;
                methodInvoker.SetArguments(arguments);
                methodInvoker.Prepare();
                return(methodInvoker.Invoke());
            }
            catch (TargetInvocationException ex)
            {
                var targetEx = ex.InnerException;

                throw new ListenerExecutionFailedException(
                          "Listener method '" + methodName + "' threw exception", targetEx, originalMessage);
            }
            catch (Exception ex)
            {
                var arrayClass = new List <string>();
                if (arguments != null)
                {
                    foreach (var argument in arguments)
                    {
                        if (argument != null)
                        {
                            arrayClass.Add(argument.GetType().ToString());
                        }
                    }
                }

                throw new ListenerExecutionFailedException(
                          "Failed to invoke target method '" + methodName
                          + "' with argument type = [" + string.Join(",", arrayClass)
                          + "], value = [" + NullSafeToString(arguments) + "]", ex,
                          originalMessage);
            }
        }