Beispiel #1
0
        /// <summary>
        /// Serializes X-Road message protocol responses according to operation definitions.
        /// </summary>
        public void SerializeResponse(XmlWriter writer, object value, XRoadMessage message, XmlReader requestReader, ICustomSerialization customSerialization)
        {
            var containsRequest = requestReader.MoveToElement(2, RequestDefinition.WrapperElementName);

            writer.WriteStartElement(ResponseDefinition.WrapperElementName);

            if (containsRequest && OperationDefinition.CopyRequestPartToResponse)
            {
                CopyRequestToResponse(writer, requestReader);
            }

            var fault = value as IXRoadFault;

            if (!ResponseDefinition.ContainsNonTechnicalFault && fault != null)
            {
                writer.WriteStartElement(ResponseDefinition.FaultName);
                message.Style.SerializeFault(writer, fault);
                writer.WriteEndElement();
            }
            else if (outputTypeMap != null)
            {
                writer.WriteStartElement(ResponseDefinition.Content.Name);

                if (fault != null)
                {
                    message.Style.SerializeFault(writer, fault);
                }
                else if (outputTypeMap != null)
                {
                    var addWrapperElement = HasWrapperResultElement;
                    if (addWrapperElement)
                    {
                        writer.WriteStartElement(ResponseDefinition.ResultElementName);
                    }

                    SerializeValue(writer, PrepareResponseValue(value), outputTypeMap, message.ResponseNode, message, ResponseDefinition.Content);

                    if (addWrapperElement)
                    {
                        writer.WriteEndElement();
                    }
                }

                writer.WriteEndElement();

                customSerialization?.OnContentComplete(writer);
            }

            writer.WriteEndElement();
        }
Beispiel #2
0
        /// <summary>
        /// Serializes X-Road message protocol responses according to operation definitions.
        /// </summary>
        public void SerializeResponse(XmlWriter writer, object value, XRoadMessage message, XmlReader requestReader, ICustomSerialization customSerialization)
        {
            var containsRequest = requestReader.MoveToElement(2, OperationDefinition.Name.LocalName, OperationDefinition.Name.NamespaceName);

            if (containsRequest)
            {
                writer.WriteStartElement(requestReader.Prefix, $"{OperationDefinition.Name.LocalName}Response", OperationDefinition.Name.NamespaceName);
            }
            else
            {
                writer.WriteStartElement($"{OperationDefinition.Name.LocalName}Response", OperationDefinition.Name.NamespaceName);
            }

            var fault = value as IXRoadFault;
            var namespaceInContext = requestReader.NamespaceURI;

            if (containsRequest && OperationDefinition.CopyRequestPartToResponse)
            {
                CopyRequestToResponse(writer, requestReader);
            }

            if (!ResponseValueDefinition.ContainsNonTechnicalFault && fault != null)
            {
                writer.WriteStartElement(ResponseValueDefinition.FaultName);
                SerializeFault(writer, fault, message.Protocol);
                writer.WriteEndElement();
            }
            else if (outputTypeMap != null)
            {
                if (Equals(namespaceInContext, ""))
                {
                    writer.WriteStartElement(ResponseValueDefinition.ResponseElementName);
                }
                else
                {
                    writer.WriteStartElement(ResponseValueDefinition.ResponseElementName, "");
                }

                if (fault != null)
                {
                    SerializeFault(writer, fault, message.Protocol);
                }
                else if (outputTypeMap != null)
                {
                    var addWrapperElement = HasWrapperResultElement;
                    if (addWrapperElement)
                    {
                        writer.WriteStartElement(ResponseValueDefinition.Name.LocalName, ResponseValueDefinition.Name.NamespaceName);
                    }

                    SerializeValue(writer, PrepareResponseValue(value), outputTypeMap, message.ResponseNode, message, ResponseValueDefinition);

                    if (addWrapperElement)
                    {
                        writer.WriteEndElement();
                    }
                }

                writer.WriteEndElement();

                customSerialization?.OnContentComplete(writer);
            }

            writer.WriteEndElement();
        }