Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 2
0
        /// <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)));
        }