public IEnumerable <XmlValidationError> Validate(byte[] data, string schemaName, XNamespace schemaNamespace, string schemaVersion) { var errors = new List <XmlValidationError>(); try { //check if the xml is not blank before doing any validations if (data != null && data.Length == 0) { errors.Add(new XmlValidationError(ErrorLevel.Error, XmlErrorType.Schema, XmlErrorTranslator.IncorrectlyFormattedXmlMessage)); return(errors); } // Validate against the schema var source = xmlConverter.Convert(data); var namespaceErrors = namespaceValidator.Validate(schemaNamespace, source.Root.Name.Namespace.ToString()); if (namespaceErrors.Any()) { return(namespaceErrors); } var schemas = new XmlSchemaSet(); using (var stream = typeof(schemeType).Assembly.GetManifestResourceStream(schemaName)) { using (var schemaReader = XmlReader.Create(stream)) { schemas.Add(null, schemaReader); } } source.Validate( schemas, (sender, args) => { var asXElement = sender as XElement; errors.Add( asXElement != null ? new XmlValidationError(ErrorLevel.Error, XmlErrorType.Schema, xmlErrorTranslator.MakeFriendlyErrorMessage(asXElement, args.Exception.Message, args.Exception.LineNumber, schemaVersion), args.Exception.LineNumber) : new XmlValidationError(ErrorLevel.Error, XmlErrorType.Schema, args.Exception.Message, args.Exception.LineNumber)); }); } catch (XmlException ex) { string friendlyMessage = xmlErrorTranslator.MakeFriendlyErrorMessage(ex.Message, schemaVersion); errors.Add(new XmlValidationError(ErrorLevel.Error, XmlErrorType.Schema, friendlyMessage)); } return(errors); }
public GenerateFromDataReturnXmlResult <T> GenerateDataReturns <T>(ProcessDataReturnXmlFile message) where T : class { Guard.ArgumentNotNull(() => message, message); T deserialisedType = null; string schemaVersion = "3.35"; // Validate against the schema var validationErrors = schemaValidator .Validate(message.Data, @"EA.Weee.Xml.DataReturns.v3schema.xsd", XmlNamespace.DataReturns, schemaVersion) .ToList(); if (!validationErrors.Any()) { try { deserialisedType = xmlConverter.Deserialize <T>(xmlConverter.Convert(message.Data)); } catch (XmlDeserializationFailureException e) { // Couldn't deserialise - can't go any further, add an error and bail out here var exceptionMessage = e.InnerException != null ? e.InnerException.Message : e.Message; var friendlyMessage = errorTranslator.MakeFriendlyErrorMessage(exceptionMessage, schemaVersion); validationErrors.Add(new XmlValidationError(Core.Shared.ErrorLevel.Error, XmlErrorType.Schema, friendlyMessage)); } } return(new GenerateFromDataReturnXmlResult <T>(xmlConverter.XmlToUtf8String(message.Data), deserialisedType, validationErrors)); }
public async Task <IEnumerable <MemberUploadError> > Validate(ProcessXmlFile message) { string schemaVersion = MemberRegistrationSchemaVersion.Version_3_07.GetAttribute <DisplayAttribute>().Name; // Validate against the schema var errors = schemaValidator.Validate(message.Data, @"EA.Weee.Xml.MemberRegistration.v3schema.xsd", XmlNamespace.MemberRegistration, schemaVersion) .Select(e => e.ToMemberUploadError()) .ToList(); if (errors.Any()) { return(errors); } schemeType deserializedXml; try { // Validate deserialized XML against business rules deserializedXml = xmlConverter.Deserialize <schemeType>(xmlConverter.Convert(message.Data)); } catch (XmlDeserializationFailureException e) { // Couldn't deserialise - can't go any further, add an error and bail out here var exceptionMessage = e.InnerException != null ? e.InnerException.Message : e.Message; var friendlyMessage = errorTranslator.MakeFriendlyErrorMessage(exceptionMessage, schemaVersion); errors.Add(new MemberUploadError(ErrorLevel.Error, UploadErrorType.Schema, friendlyMessage)); return(errors); } errors = (await businessValidator.Validate(deserializedXml, message.OrganisationId)) .Select(err => new MemberUploadError(err.ErrorLevel.ToDomainEnumeration <ErrorLevel>(), UploadErrorType.Business, err.Message)) .ToList(); return(errors); }