/// <summary> /// Creates a response message for a message that failed XML or FpML /// validation. /// </summary> /// <param name="release">The FpML release to respond with.</param> /// <param name="context">Identifies the user.</param> /// <param name="document">The parsed form of the input messsage or <b>null</b>.</param> /// <param name="errorSet">The set of detected errors.</param> /// <returns></returns> private string CreateRejectedMessage(SchemaRelease release, UserContext context, XmlDocument document, ValidationErrorSet errorSet) { Builder builder = CreateMessage(release, "messageRejected", context, document); for (int index = 0; index < errorSet.Count; ++index) { ValidationError error = errorSet [index]; builder.AppendElement("reason"); builder.AppendElementAndText("reasonCode", error.Code); builder.AppendElement("location"); builder.SetAttribute("locationType", error.IsLexical ? "lexical" : "xpath"); builder.AppendText(error.Context); builder.CloseElement(); if (error.Description != null) { builder.AppendElementAndText("description", error.Description); } if (error.RuleName != null) { builder.AppendElementAndText("validationRuleId", error.RuleName); } if (error.AdditionalData != null) { builder.AppendElement("additionalData"); builder.AppendElementAndText("string", error.AdditionalData); builder.CloseElement(); } builder.CloseElement(); } return(NestedWriter.ToString(builder.Document)); }
/// <summary> /// Initiates the processing for a message and returns a resulting /// message or <b>null</b> if none. /// </summary> /// <param name="context">Identifies the user.</param> /// <param name="message">The message to be processed.</param> /// <returns>The resulting message or <b>null</b>.</returns> public override Message Process(UserContext context, Message message) { ValidationErrorSet errorSet = new ValidationErrorSet(); ValidationErrorSetAdapter adapter = new ValidationErrorSetAdapter(errorSet); SchemaRelease release = Releases.R5_9_CONFIRMATION; XmlDocument document = FpMLUtility.Parse(message.Payload, adapter.SyntaxError); if (errorSet.Count == 0) { release = (SchemaRelease)Releases.FPML.GetReleaseForDocument(document); if (release == null) { release = Releases.R5_9_CONFIRMATION; } if (FpMLUtility.Validate(document, adapter.SemanticError)) { return(message.Reply(CreateAcceptedMessage(release, context, document))); } } return(message.Reply(CreateRejectedMessage(release, context, document, errorSet))); }