Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 158d9887 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

extending xml validator callback and pass on custom error message

parent 4ec0347c
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
......
......@@ -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);
}
......
......@@ -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) {
......
......@@ -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)
......
......@@ -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);
......
......@@ -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");
}
}
......
......@@ -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"));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment