Example #1
0
 public bool Invoke(string[] cols)
 {
     var data = DataListUtil.AdjustForEncodingIssues(cols[0]);
     bool isFragment;
     var isXml = DataListUtil.IsXml(data, out isFragment);
     return isXml || isFragment;
 }
Example #2
0
        public void DataListUtil_AdjustForEncodingIssues_WithStringLengthOf3_SameDataAsPassedIn()
        {
            //------------Setup for test--------------------------
            const string startingData = "A A";
            //------------Execute Test---------------------------
            string result = DataListUtil.AdjustForEncodingIssues(startingData);

            //------------Assert Results-------------------------
            Assert.AreEqual(startingData, result, "The data has changed when there was no encoding issues.");
        }
        public void DataListUtil_AdjustForEncodingIssues_BOMRemoved()
        {
            //------------Setup for test--------------------------
            const char c            = ((char)65279);
            string     startingData = c + "<A></A>";

            Assert.IsFalse(startingData.StartsWith("<", StringComparison.OrdinalIgnoreCase));
            //------------Execute Test---------------------------
            string result = DataListUtil.AdjustForEncodingIssues(startingData);

            //------------Assert Results-------------------------
            Assert.IsTrue(result.StartsWith("<"));
        }
Example #4
0
        /// <summary>
        /// Executes the X path.
        /// </summary>
        /// <param name="xmlData">The XML data.</param>
        /// <param name="xPath">The x path.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">
        /// xmlData
        /// or
        /// xPath
        /// </exception>
        /// <exception cref="System.Exception">
        /// Input XML is not valid.
        /// or
        /// The XPath expression provided is not valid.
        /// </exception>
        public IEnumerable <string> ExecuteXPath(string xmlData, string xPath)
        {
            if (String.IsNullOrEmpty(xmlData))
            {
                throw new ArgumentNullException("xmlData");
            }
            if (String.IsNullOrEmpty(xPath))
            {
                throw new ArgumentNullException("xPath");
            }
            try
            {
                bool isFragment;
                var  useXmlData = DataListUtil.AdjustForEncodingIssues(xmlData);
                var  isXml      = DataListUtil.IsXml(useXmlData, out isFragment);

                if (!isXml && !isFragment)
                {
                    throw new Exception("Input XML is not valid.");
                }

                using (TextReader stringReader = new StringReader(useXmlData))
                {
                    XmlReaderSettings settings = new XmlReaderSettings
                    {
                        IgnoreWhitespace = true,
                        DtdProcessing    = DtdProcessing.Ignore,
                        ConformanceLevel = ConformanceLevel.Auto
                    };

                    using (XmlTextReader xtr = new XmlTextReader(stringReader))
                    {
                        xtr.Namespaces = false;

                        using (XmlReader reader = XmlReader.Create(xtr, settings))
                        {
                            reader.Read();

                            if (reader.NodeType == XmlNodeType.XmlDeclaration || reader.NodeType == XmlNodeType.Whitespace)
                            {
                                reader.Skip();
                                // handle DocumentType nodes
                                if (reader.NodeType == XmlNodeType.DocumentType)
                                {
                                    reader.Skip();
                                }
                                // skip white space ;)
                                while (reader.Value.IndexOf("\n", StringComparison.Ordinal) >= 0 || reader.NodeType == XmlNodeType.Comment)
                                {
                                    reader.Skip();
                                }
                            }

                            if (xPath.StartsWith("/" + reader.Name) || xPath.StartsWith("//" + reader.Name))
                            {
                                xPath = xPath.Replace("/" + reader.Name, "");
                            }
                            else if (xPath.StartsWith(reader.Name))
                            {
                                xPath = xPath.Replace(reader.Name, "/");
                            }

                            XNode xNode = XNode.ReadFrom(reader);
                            IEnumerable <object> xdmValue = xNode.XPath2Select(xPath);
                            var list = xdmValue.Select(element =>
                            {
                                var realElm = element as XObject;
                                if (realElm != null && realElm.NodeType == XmlNodeType.Attribute)
                                {
                                    var xAttribute = realElm as XAttribute;
                                    if (xAttribute != null)
                                    {
                                        return(xAttribute.Value);
                                    }
                                }

                                return(element.ToString());
                            }).ToList();
                            return(list);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                if (exception.GetType() == typeof(XPath2Exception))
                {
                    throw new Exception("The XPath expression provided is not valid.");
                }

                Dev2Logger.Log.Error(exception);
                throw;
            }
        }
Example #5
0
        public IEnumerable <string> ExecuteXPath(string xmlData, string xPath)
        {
            if (string.IsNullOrEmpty(xmlData))
            {
                throw new ArgumentNullException(nameof(xmlData));
            }

            if (string.IsNullOrEmpty(xPath))
            {
                throw new ArgumentNullException(nameof(xPath));
            }

            try
            {
                var useXmlData = DataListUtil.AdjustForEncodingIssues(xmlData);
                var isXml      = DataListUtil.IsXml(useXmlData, out bool isFragment);

                if (!isXml && !isFragment)
                {
                    throw new Exception("Input XML is not valid.");
                }
                List <string> stringList;
                var           document = new XmlDocument();
                document.LoadXml(useXmlData);
                var namespaces = new List <KeyValuePair <string, string> >();
                if (document.DocumentElement != null)
                {
                    namespaces = AddAttributesAsNamespaces(document, namespaces);
                }
                using (TextReader stringReader = new StringReader(useXmlData))
                {
                    var processor = new Processor(false);
                    var compiler  = processor.NewXPathCompiler();
                    compiler.XPathLanguageVersion = "3.0";
                    foreach (var keyValuePair in namespaces)
                    {
                        compiler.DeclareNamespace(keyValuePair.Key, keyValuePair.Value);
                    }
                    var xPathExecutable    = compiler.Compile(xPath);
                    var xPathSelector      = xPathExecutable.Load();
                    var newDocumentBuilder = processor.NewDocumentBuilder();
                    newDocumentBuilder.BaseUri          = new Uri("http://warewolf.io");
                    newDocumentBuilder.WhitespacePolicy = WhitespacePolicy.StripAll;
                    var xdmNode = newDocumentBuilder.Build(stringReader);
                    xPathSelector.ContextItem = xdmNode;
                    var xdmValue = xPathSelector.Evaluate();
                    var list     = xdmValue.GetEnumerator();

                    stringList = BuildListFromXPathResult(list);
                }
                return(stringList);
            }
            catch (Exception exception)
            {
                if (exception.GetType() == typeof(SAXException))
                {
                    throw new Exception(ErrorResource.XPathProvidedNotValid);
                }

                Dev2Logger.Error(exception, GlobalConstants.WarewolfError);
                throw;
            }
        }
Example #6
0
        static void WriteDebugItems(string workflowName, string taskName, string result)
        {
            var user = Thread.CurrentPrincipal.Identity.Name.Replace("\\", "-");

            var state = new DebugState
            {
                HasError      = result.Contains("Exception"),
                ID            = Guid.NewGuid(),
                StartTime     = StartTime,
                EndTime       = DateTime.Now,
                ActivityType  = ActivityType.Workflow,
                ExecutingUser = user,
                Server        = "localhost",
                ServerID      = Guid.Empty,
                DisplayName   = workflowName
            };

            if (!string.IsNullOrEmpty(result))
            {
                var data  = DataListUtil.AdjustForEncodingIssues(result);
                var isXml = DataListUtil.IsXml(data, out bool isFragment);
                if (isXml)
                {
                    var xmlData     = XElement.Parse(data);
                    var allChildren = xmlData.Elements();
                    var groupedData = allChildren.GroupBy(element => element.Name);

                    var recSets = groupedData as IGrouping <XName, XElement>[] ?? groupedData.ToArray();
                    foreach (var grouping in recSets)
                    {
                        var debugItem = new DebugItem();
                        foreach (var name in grouping)
                        {
                            if (name.HasElements)
                            {
                                var debugItemResult = ProcessRecordSet(name, name.Elements());
                                debugItem.ResultsList.AddRange(debugItemResult);
                            }
                            else
                            {
                                var debugItemResult = new DebugItemResult
                                {
                                    Variable = DataListUtil.AddBracketsToValueIfNotExist(name.Name.LocalName),
                                    Value    = name.Value,
                                    Operator = "=",
                                    Type     = DebugItemResultType.Variable
                                };
                                debugItem.ResultsList.Add(debugItemResult);
                            }
                        }
                        state.Outputs.Add(debugItem);
                    }
                }
            }
            var js = new Dev2JsonSerializer();

            Thread.Sleep(5000);
            var correlation = GetCorrelationId(WarewolfTaskSchedulerPath + taskName);

            if (!Directory.Exists(OutputPath))
            {
                Directory.CreateDirectory(OutputPath);
            }

            File.WriteAllText(
                $"{OutputPath}DebugItems_{workflowName.Replace("\\", "_")}_{DateTime.Now.ToString("yyyy-MM-dd")}_{correlation}_{user}.txt",
                js.SerializeToBuilder(new List <DebugState> {
                state
            }).ToString());
        }