public override async Task SafeExecute(QueryContext <IPipeline> args)
        {
            var pipelineRoot  = args.GetPropertyValueOrNull <XElement>(GetPipelineProperties.XElement);
            var tagName       = args.GetPropertyValueOrNull <string>(GetPipelineProperties.ProcessorTagName);
            var typeAttribute = args.GetPropertyValueOrNull <string>(GetPipelineProperties.TypeAttributeName);

            var processorsElements = pipelineRoot.Elements(tagName);
            var processorParser    = GetProcessorParser();
            var list = new LinkedList <IProcessor>();

            foreach (var processorElement in processorsElements)
            {
                QueryContext <IProcessor> getProcessorContext = new GetProcessorContext
                {
                    XElement           = processorElement,
                    ProcessorAttribute = typeAttribute
                };
                var processor = await processorParser.Execute(getProcessorContext);

                args.AddMessageObjects(getProcessorContext.GetAllMessages());

                if (processor == null)
                {
                    continue;
                }

                list.AddLast(processor);
            }

            var processors = args.GetPropertyValueOrDefault(
                GetPipelineProperties.Processors,
                Enumerable.Empty <IProcessor>()
                ).ToList();

            processors.AddRange(list);
            args.SetOrAddProperty(GetPipelineProperties.Processors, processors);
        }