Beispiel #1
0
        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));
        }
Beispiel #3
0
        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);
        }