public static EDIValidationResult ValidateEdi(string ediData, string ediFileName, string schemaFileName, string certFileDisplayName, string type, SpecCertFileType fileType, IDocumentPlug documentPlug, out IFatpipeDocument fatpipeDocument) { Stopwatch sw = new Stopwatch(); sw.Start(); EDIValidationResult ediValidationResult = new EDIValidationResult() { FileName = ediFileName, SchemaName = schemaFileName, SegmentValidationResults = new List <SegmentValidationResult>(), TransactionNumbers = new List <string>(), DisplayName = certFileDisplayName, Type = type, }; fatpipeDocument = null; try { ediValidationResult.SegmentValidationResults.Clear(); string endHeader = string.Empty; switch (fileType) { case SpecCertFileType.X12: EDIReader ediReader = new EDIReader(); if (ediReader.Initialize(new MemoryStream(Encoding.UTF8.GetBytes(ediData)), null, documentPlug) == true) { try { IFatpipeDocument currentFatpipeDocument = null; while ((currentFatpipeDocument = ediReader.GetNextTransactionSet()) != null) { if (string.IsNullOrWhiteSpace(ediValidationResult.BeautifiedOriginalPayload)) { ediValidationResult.BeautifiedOriginalPayload = currentFatpipeDocument.BeautifiedOriginalPayloadStartHeader; endHeader = currentFatpipeDocument.BeautifiedOriginalPayloadEndHeader; } ediValidationResult.BeautifiedOriginalPayload += currentFatpipeDocument.BeautifiedOriginalPayloadBody; ediValidationResult.TransactionNumbers.Add(currentFatpipeDocument.TransactionNumber); ediValidationResult.SegmentValidationResults.AddRange(ediReader.Errors.GetSegmentValidationResults()); fatpipeDocument = currentFatpipeDocument; } ediValidationResult.BeautifiedOriginalPayload += endHeader; } catch (EDIReaderException ediReaderException) { // Add whatever errors we accumulated ediValidationResult.SegmentValidationResults.AddRange(ediReader.Errors.GetSegmentValidationResults()); ediValidationResult.SegmentValidationResults.Add( new SegmentValidationResult() { Type = ResultType.Error, SequenceNumber = -1, Name = "N/A", Description = ediReaderException.Message, StartIndex = -1, EndIndex = -1, }); } } //ediValidationResult.SegmentValidationResults.AddRange(ediReader.Errors.GetSegmentValidationResults()); break; case SpecCertFileType.FlatFile: FlatFileReader flatFileReader = new FlatFileReader(); fatpipeDocument = flatFileReader.ReadFile(new MemoryStream(Encoding.UTF8.GetBytes(ediData)), documentPlug); ediValidationResult.BeautifiedOriginalPayload = fatpipeDocument.BeautifiedOriginalPayloadBody; ediValidationResult.SegmentValidationResults.AddRange(flatFileReader.Errors.GetSegmentValidationResults()); break; case SpecCertFileType.Xml: XmlFileReader xmlFileReader = new XmlFileReader(); fatpipeDocument = xmlFileReader.ReadFile(new MemoryStream(Encoding.UTF8.GetBytes(ediData)), documentPlug); ediValidationResult.BeautifiedOriginalPayload = fatpipeDocument.BeautifiedOriginalPayloadBody; ediValidationResult.SegmentValidationResults.AddRange(xmlFileReader.Errors.GetSegmentValidationResults()); break; default: ediValidationResult.SegmentValidationResults.Add( new SegmentValidationResult() { Type = ResultType.Error, SequenceNumber = -1, Name = "N/A", Description = "Invalid cert file type (only EDI and FaltFile is supported)", //ex.Message, StartIndex = -1, EndIndex = -1, }); break; } } catch (Exception ex) { ediValidationResult.SegmentValidationResults.Add( new SegmentValidationResult() { Type = ResultType.Error, SequenceNumber = -1, Name = "N/A", //Description = "Internal error occurred",//ex.Message, Description = "Internal error occurred. " + ex.ToString(), StartIndex = -1, EndIndex = -1, }); } sw.Stop(); ediValidationResult.ExecutionTime = sw.Elapsed; return(ediValidationResult); }