diff --git a/HashingTool/Util/AsyncXMLValidator.cs b/HashingTool/Util/AsyncXMLValidator.cs index f6e8dded14156a67a2395b89c620f271bee182f1..59d8254351e5de653d96ea6a43908b645f3dc03a 100644 --- a/HashingTool/Util/AsyncXMLValidator.cs +++ b/HashingTool/Util/AsyncXMLValidator.cs @@ -41,7 +41,7 @@ namespace HashingTool.Util { private XMLValidator _validator; - public AsyncXMLValidator(XmlReader xml, Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent> validationErrorAction) + public AsyncXMLValidator(XmlReader xml, Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent, string> validationErrorAction) { _validator = new XMLValidator(xml, resultaction, validationErrorAction); } diff --git a/HashingTool/ViewModel/HashComponentDataViewModel.cs b/HashingTool/ViewModel/HashComponentDataViewModel.cs index 01641b30662e1801e6db9c0a5dfff0118ba66763..f9bdc6b59ba4a03dd817dd8fc919f0e381ee6c2a 100644 --- a/HashingTool/ViewModel/HashComponentDataViewModel.cs +++ b/HashingTool/ViewModel/HashComponentDataViewModel.cs @@ -154,14 +154,14 @@ namespace HashingTool.ViewModel ms.Seek(0, SeekOrigin.Begin); ComponentDataValid = true; var validator = new AsyncXMLValidator(XmlReader.Create(ms), r => { ComponentDataValid = r; }, - (s, e) => { + (s, e, m) => { Application.Current.Dispatcher.Invoke(() => _xmlFile.LogError( - string.Format("Validation {0} Line {2}: {1}", - s == XmlSeverityType.Warning ? "WARNING" : "ERROR", + string.Format("Validation {0} Line {2}: {1}{3}", + s == XmlSeverityType.Warning ? "WARNING" : "ERROR", e.ValidationEventArgs == null - ? e.Exception.Message + (e.Exception.InnerException != null ? Environment.NewLine + e.Exception.InnerException.Message : "") + ? (e.Exception?.Message ?? "") + (e.Exception?.InnerException != null ? Environment.NewLine + e.Exception.InnerException.Message : "") : e.ValidationEventArgs.Message, - e.ValidationEventArgs?.Exception.LineNumber ?? 0))); + e.ValidationEventArgs?.Exception.LineNumber ?? 0, m))); }); await validator.ValidateXML(XmlDocumentType.DeclarationComponentData); } diff --git a/HashingTool/ViewModel/UserControl/XMLFileSelector.cs b/HashingTool/ViewModel/UserControl/XMLFileSelector.cs index 1bcf23c1ccd3699d81beec8b449958e05febc08a..d1cecfc098b888d28f1d7f4e75b05a1ef3c49f1b 100644 --- a/HashingTool/ViewModel/UserControl/XMLFileSelector.cs +++ b/HashingTool/ViewModel/UserControl/XMLFileSelector.cs @@ -275,7 +275,7 @@ namespace HashingTool.ViewModel.UserControl var valid = true; try { var validator = new AsyncXMLValidator(xml, r => { valid = r; }, - (s, e) => { + (s, e, m) => { Application.Current.Dispatcher.Invoke( () => { if (e.ValidationEventArgs == null) { diff --git a/VECTO3GUI2020/Helper/XmlHelper.cs b/VECTO3GUI2020/Helper/XmlHelper.cs index af8abe92b4bf8c5f6e0f6479ffaee6a9b75a1fbd..9401e886066fa33065514f54ea54a5abee7a1d55 100644 --- a/VECTO3GUI2020/Helper/XmlHelper.cs +++ b/VECTO3GUI2020/Helper/XmlHelper.cs @@ -36,7 +36,7 @@ namespace VECTO3GUI2020.Helper } public static bool ValidateXDocument(XDocument xDocument, Action<bool> resultAction = null, - Action<XmlSeverityType, ValidationEvent> validationErrorAction = null) + Action<XmlSeverityType, ValidationEvent, string> validationErrorAction = null) { var xmlDocument = xDocument.ToXmlDocument(); if (xmlDocument == null) diff --git a/VectoCommon/VectoHashingTest/VectoHashTest.cs b/VectoCommon/VectoHashingTest/VectoHashTest.cs index ce2fdff3a779688c744b6df1c4bd87e5ca49893b..9ac7c5b9eed305f9fc3b006b3404bb3648b343e3 100644 --- a/VectoCommon/VectoHashingTest/VectoHashTest.cs +++ b/VectoCommon/VectoHashingTest/VectoHashTest.cs @@ -743,7 +743,7 @@ namespace VectoHashingTest var variationValid = h2.ValidateHash(); Assert.IsTrue(variationValid); - var validatorV = new XMLValidator(xmlDocV, validationErrorAction: (s, ve) => {}); + var validatorV = new XMLValidator(xmlDocV, validationErrorAction: (s, ve, m) => {}); var result = validatorV.ValidateXML(XmlDocumentType.DeclarationComponentData); Assert.IsFalse(result); @@ -799,7 +799,7 @@ namespace VectoHashingTest var h = VectoHash.Load(xmlDoc); var hashed = h.AddHash(); var validator = new XMLValidator(XmlReader.Create(new StringReader(hashed.ToString())), - validationErrorAction: (s, ve) => { }); + validationErrorAction: (s, ve, m) => { }); var result = validator.ValidateXML(XmlDocumentType.DeclarationComponentData); Assert.IsFalse(result); diff --git a/VectoCore/VectoCore/Utils/XMLValidator.cs b/VectoCore/VectoCore/Utils/XMLValidator.cs index 120f525fe39329303faa87df3b20ce52e230b2bd..5dc37bed6ade17d72d79bcb08163d81ee524f480 100644 --- a/VectoCore/VectoCore/Utils/XMLValidator.cs +++ b/VectoCore/VectoCore/Utils/XMLValidator.cs @@ -44,22 +44,22 @@ namespace TUGraz.VectoCore.Utils { public class XMLValidator { - private readonly Action<XmlSeverityType, ValidationEvent> _validationErrorAction; + private readonly Action<XmlSeverityType, ValidationEvent, string> _validationErrorAction; private readonly Action<bool> _resultAction; private bool _valid; private XmlDocument _doc; private List<string> _validationErrors = new List<string>(); - private XMLValidator(Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent> validationErrorAction) + private XMLValidator(Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent, string> validationErrorAction) { - _validationErrorAction = validationErrorAction ?? ((x, y) => { }); + _validationErrorAction = validationErrorAction ?? ((x, y, s) => { }); _resultAction = resultaction ?? (x => { }); _valid = false; } public XMLValidator( XmlReader document, Action<bool> resultaction = null, - Action<XmlSeverityType, ValidationEvent> validationErrorAction = null) : this(resultaction, validationErrorAction) + Action<XmlSeverityType, ValidationEvent, string> validationErrorAction = null) : this(resultaction, validationErrorAction) { _doc = new XmlDocument(); _doc.Load(document); @@ -67,7 +67,7 @@ namespace TUGraz.VectoCore.Utils public XMLValidator( XmlDocument document, Action<bool> resultaction = null, - Action<XmlSeverityType, ValidationEvent> validationErrorAction = null) : this(resultaction, validationErrorAction) + Action<XmlSeverityType, ValidationEvent, string> validationErrorAction = null) : this(resultaction, validationErrorAction) { _doc = document; } @@ -115,22 +115,16 @@ namespace TUGraz.VectoCore.Utils { _resultAction(false); _valid = false; - var validationEvent = new ValidationEvent { ValidationEventArgs = args }; - if (sender == this) { - //validationEvent = new ValidationEvent() { }; - } else { - _validationErrors.Add(args?.Message ?? "no schema found"); - _validationErrorAction(args?.Severity ?? XmlSeverityType.Error, new ValidationEvent { ValidationEventArgs = args }); - } - _validationErrorAction(args?.Severity ?? XmlSeverityType.Error, validationEvent); + _validationErrors.Add(args?.Message ?? "no schema found"); + _validationErrorAction(args?.Severity ?? XmlSeverityType.Error, new ValidationEvent { ValidationEventArgs = args }, ValidationError); } public string ValidationError => _validationErrors.Any() ? _validationErrors.Join(Environment.NewLine) : null; - public static void CallBackExceptionOnError(XmlSeverityType severity, ValidationEvent evt) + public static void CallBackExceptionOnError(XmlSeverityType severity, ValidationEvent evt, string message) { if (severity == XmlSeverityType.Error) { - throw new VectoException("Validation error: {0}", evt?.ValidationEventArgs?.Message ?? "XML schema not known"); + throw new VectoException("Validation error: {0}", evt?.ValidationEventArgs?.Message ?? message ?? "XML schema not known"); } } diff --git a/VectoCore/VectoCoreTest/XML/XMLReportTest.cs b/VectoCore/VectoCoreTest/XML/XMLReportTest.cs index 8d577a78d3ac5912dd2896b200f66290061232c1..33a12a3d9fe0b072ed05951a8d76f676e3e8aa17 100644 --- a/VectoCore/VectoCoreTest/XML/XMLReportTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLReportTest.cs @@ -94,13 +94,13 @@ namespace TUGraz.VectoCore.Tests.XML var validationMsg1 = new List<string> {customerRecord} ; - var validator1 = new XMLValidator(XmlReader.Create(customerRecord), validationErrorAction: (s,e) => { + var validator1 = new XMLValidator(XmlReader.Create(customerRecord), validationErrorAction: (s,e, m) => { validationMsg1.Add(e?.ValidationEventArgs?.Message ?? "no schema found?"); }); Assert.IsTrue(validator1.ValidateXML(XmlDocumentType.CustomerReport), validationMsg1.Join("\n")); var validationMsg2 = new List<string> {manufacturerRecord}; - var validator2 = new XMLValidator(XmlReader.Create(manufacturerRecord), validationErrorAction: (s,e) => { + var validator2 = new XMLValidator(XmlReader.Create(manufacturerRecord), validationErrorAction: (s,e, m) => { validationMsg2.Add(e?.ValidationEventArgs?.Message ?? "no schema found"); }); Assert.IsTrue(validator2.ValidateXML(XmlDocumentType.ManufacturerReport), validationMsg2.Join("\n"));