/// <summary> /// Parse the <paramref name="dmnDefinition">string</paramref> with DMN Model XML definition based on <paramref name="dmnVersion">DMN standard version</paramref>. /// </summary> /// <param name="dmnDefinition">DMN Model XML definition</param> /// <param name="dmnVersion">DMN standard version to be used for parsing. Version 1.1 (<see cref="DmnVersionEnum.V1_1"/> is used as default if the version is not provided.</param> /// <returns>Parsed DMN Model</returns> /// <exception cref="DmnParserException">Missing DMN Model definition (<paramref name="dmnDefinition"/> is null or empty)</exception> /// <exception cref="DmnParserException">Can't parse DMN definition</exception> public static DmnModel ParseString(string dmnDefinition, DmnVersionEnum dmnVersion = DmnVersionEnum.V1_1) { dmnDefinition = dmnDefinition?.Trim(); if (string.IsNullOrWhiteSpace(dmnDefinition)) { throw Logger.Fatal <DmnParserException>("Missing DMN Model definition"); } DmnModel def; // ReSharper disable once AssignNullToNotNullAttribute using (var rdr = new StringReader(dmnDefinition)) { try { Logger.Info($"Parsing DMN definition from given string..."); if (Logger.IsTraceEnabled) { Logger.Trace(dmnDefinition); } switch (dmnVersion) { case DmnVersionEnum.V1_1: def = (DmnModel)DmnDefinitionsSerializer.Deserialize(rdr); break; case DmnVersionEnum.V1_3: def = (DmnModel)DmnDefinitionsSerializer13.Deserialize(rdr); break; default: throw new ArgumentOutOfRangeException(nameof(dmnVersion), dmnVersion, null); } Logger.Info($"Parsed DMN definition from given string"); } catch (Exception ex) { throw Logger.Fatal <DmnParserException>($"Can't parse definition from given string: {ex.Message}", ex); } } return(def); }
/// <summary> /// Parse the <paramref name="filePath">file</paramref> with DMN Model XML definition based on <paramref name="dmnVersion">DMN standard version</paramref>. /// </summary> /// <param name="filePath">Path to the file to be parsed</param> /// <param name="dmnVersion">DMN standard version to be used for parsing. Version 1.1 (<see cref="DmnVersionEnum.V1_1"/> is used as default if the version is not provided.</param> /// <returns> Parsed DMN Model</returns> /// <exception cref="DmnParserException">Missing file path (<paramref name="filePath"/> is null or empty)</exception> /// <exception cref="DmnParserException">File doesn't exist</exception> /// <exception cref="DmnParserException">Can't parse file</exception> public static DmnModel Parse(string filePath, DmnVersionEnum dmnVersion = DmnVersionEnum.V1_1) { if (string.IsNullOrWhiteSpace(filePath)) { throw Logger.Fatal <DmnParserException>($"{nameof(filePath)} is null or empty"); } if (!File.Exists(filePath)) { throw Logger.Fatal <DmnParserException>($"File {filePath} doesn't exist"); } DmnModel def; // ReSharper disable once AssignNullToNotNullAttribute using (var rdr = new StreamReader(filePath)) { try { Logger.Info($"Parsing DMN file {filePath}..."); switch (dmnVersion) { case DmnVersionEnum.V1_1: def = (DmnModel)DmnDefinitionsSerializer.Deserialize(rdr); break; case DmnVersionEnum.V1_3: def = (DmnModel)DmnDefinitionsSerializer13.Deserialize(rdr); break; default: throw new ArgumentOutOfRangeException(nameof(dmnVersion), dmnVersion, null); } Logger.Info($"Parsed DMN file {filePath}"); } catch (Exception ex) { throw Logger.Fatal <DmnParserException>($"Can't parse file {filePath}: {ex.Message}", ex); } } return(def); }