3.1.5.1.1 Message Deserialization

Any SRMP message that is received by the QM MUST be deserialized in the following way:

  • A new instance of the SRMPMessage data element MUST be created.

  • The SRMPMessage.SoapCompoundMessage attribute MUST be set to the entire contents of the incoming SRMP message, as described in [MS-MQDMPR] section 3.1.1.12.

  • The SRMPMessage.SoapEnvelope attribute MUST be set to the SOAP envelope of the incoming SRMP message, as described in [MS-MQDMPR] section 3.1.1.12.

  • The SRMPMessage.SoapHeader attribute MUST be set to the SOAP header of the incoming SRMP message, as described in [MS-MQDMPR] section 3.1.1.12.

  • The SRMPMessage.SoapBody attribute MUST be set to the SOAP body of the incoming SRMP message, as described in [MS-MQDMPR] section 3.1.1.12.

  • The SRMPMessage.ArrivalTime attribute MUST be set to the current system time, as described in [MS-MQDMPR] section 3.1.1.12.

  • The SOAP envelope of the incoming message MUST be parsed and assigned to the attributes of the new SRMPMessage element as follows:

    • The contents of the <path> element MUST be parsed and assigned as follows:

      • The contents of the <action> element MUST be parsed and assigned as follows:

        • If the string that is contained in the <action> element begins with "MSMQ:", the SRMPMessage.Label attribute MUST be set to the suffix of the <action> element directly following the "MSMQ:" prefix.

        • If the string contained in the <action> element does not begin with "MSMQ:", the SRMPMessage.Label attribute MUST be set to NULL.

      • The contents of the <to> element MUST be parsed and assigned as follows:

        • If the string that is contained in the <to> element begins with "http://" or "https://", the SRMPMessage.DestinationQueueFormatName attribute MUST be set to the string that is contained in the <to> element, prepended with "DIRECT=".

        • If the string that is contained in the <to> element begins with "MSMQ:MULTICAST", the SRMPMessage.DestinationQueueFormatName attribute MUST be set to the suffix of the <to> element directly following the "MSMQ:" prefix.

      • The contents of the <id> element MUST be parsed and assigned as follows:

        • A new instance of type OBJECTID (see [MS-MQMQ] section 2.2.8) MUST be instantiated.

        • If the <Msmq> element is present in the message, the index component of the new OBJECTID (OBJECTID.Uniquifier) MUST be set to the substring of the <id> element that follows the string "uuid:" and precedes the "@" character, and then converted to a numeric value; otherwise, the OBJECTID.Uniquifier MUST be set to 1.

        • If the <Msmq> element is present in the message, the GUID component of the new OBJECTID (OBJECTID.Lineage) MUST be set to the substring of the <id> element that directly follows the "@" character; otherwise, the OBJECTID.Lineage MUST be set to a NULL GUID.

        • The SRMPMessage.Identifier attribute MUST be set to the new OBJECTID.

      • If present, the contents of the <rev> element MUST be parsed and assigned as follows:

        • If the string that is contained in the <via> element begins with "http://" or "https://", the SRMPMessage.ResponseQueueFormatName attribute MUST be set to the string that is contained in the <via> element.

        • If the string that is contained in the <via> element begins with "MSMQ:", the SRMPMessage.ResponseQueueFormatName attribute MUST be set to the suffix of the <via> element directly following the "MSMQ:" prefix.

    • The contents of the <properties> element MUST be parsed and assigned as follows:

      • If the <Msmq> element is not present in the message, the SRMPMessage.TimeToReachQueue attribute MUST be set to the time span value that is the difference between the UTC date/time value that is contained in the <expiresAt> element and the UTC date/time value that is contained in the <sentAt> element.

      • The SRMPMessage.SentTime attribute MUST be set to the UTC date/time value that is contained in the <sentAt> element, if present.

    • The contents of the <services> element MUST be parsed and assigned as follows:

      • The SRMPMessage.DeliveryGuarantee attribute MUST be set to Recoverable if the <durable/> element is present; otherwise, the attribute MUST be set to Express.

      • If present, the contents of the <deliveryReceiptRequest> element MUST be parsed and assigned as follows:

        • The SRMPMessage.AcknowledgementsRequested attribute MUST be extended by the AckPosArrival enumeration value if the <deliveryReceiptRequest> element is present.

        • If the string that is contained in the <sendTo> element begins with "http://" or "https://", the SRMPMessage.AdministationQueueFormatName attribute MUST be set to the string that is contained in the <sendTo> element.

      • If present, the contents of the <commitmentReceiptRequest> element MUST be parsed and assigned as follows:

        • The SRMPMessage.FinalAckRequired attribute MUST be set to True if the <commitmentReceiptRequest> element is present.

        • If the string that is contained in the <sendTo> element begins with "http://" or "https://", the SRMPMessage.AdministationQueueFormatName attribute MUST be set to the string that is contained in the <sendTo> element.

        • The SRMPMessage.AcknowledgementsRequested attribute MUST be extended by the AckPosReceive enumeration value if the <positiveOnly/> element is present.

        • The SRMPMessage.AcknowledgementsRequested attribute MUST be extended by the AckNegReceive enumeration value if the <negativeOnly/> element is present.

    • If present, the contents of the <stream> element MUST be parsed and assigned as follows:

      • The contents of the <streamId> element MUST be parsed and assigned as follows:

        • The SRMPMessage.TransactionalMessageSequenceIdentifier attribute MUST be set to the substring of the <streamId> element directly following the "\" character.

      • The SRMPMessage.TransactionSequenceNumber attribute MUST be set to the numeric value that is contained in the <current> element.

      • The SRMPMessage.TransactionPreviousSequenceNumber attribute MUST be set to the numeric value that is contained in the <previous> element, if present.

      • If present, the contents of the <start> element MUST be parsed and assigned as follows:

        • If the string that is contained in the <sendReceiptsTo> element begins with "http://" or "https://", the SRMPMessage.AdministationQueueFormatName attribute MUST be set to the string that is contained in the <sendReceiptsTo> element.

    • If present, the contents of the <Msmq> element MUST be parsed and assigned as follows:

      • The SRMPMessage.Class attribute MUST be set to the enumeration value that is represented by the numeric value that is contained in the <Class> element.

      • The SRMPMessage.Priority attribute MUST be set to the numeric value that is contained in the <Priority> element.

      • The SRMPMessage.PositiveJournalingRequested attribute MUST be set to True if the <Journal/> element is present; otherwise, to False.

      • The SRMPMessage.NegativeJournalingRequested attribute MUST be set to True if the <DeadLetter/> element is present; otherwise, to False.

      • The SRMPMessage.CorrelationIdentifier attribute MUST be set to the value that is contained in the <Correlation> element, if present.

      • The SRMPMessage.TracingRequested attribute MUST be set to True if the <Trace/> element is present; otherwise, to False.

      • The SRMPMessage.ConnectorTypeIdentifier attribute MUST be set to the GUID that is represented by the string value that is contained in the <ConnectorType> element, if present.

      • The SRMPMessage.ApplicationTag attribute MUST be set to the numeric value that is contained in the <App> element, if present.

      • The SRMPMessage.BodyType attribute MUST be set to the numeric value that is contained in the <BodyType> element.

      • The SRMPMessage.HashAlgorithm attribute MUST be set to the enumeration value that is represented by the numeric value that is contained in the <HashAlgorithm> element, if present.

      • If present, the contents of the <Eod> element MUST be parsed and assigned as follows:

        • The SRMPMessage.FirstInTransaction attribute MUST be set to True if the <First/> element is present; otherwise, to False.

        • The SRMPMessage.LastInTransaction attribute MUST be set to True if the <Last/> element is present; otherwise, to False.

        • The SRMPMessage.ConnectorQueueManagerIdentifier attribute MUST be set to the GUID that is represented by the string value that is contained in the <ConnectorId> element, if present.

      • If present, the contents of the <Provider> element MUST be parsed and assigned as follows:

        • The SRMPMessage.AuthenticationProviderType attribute MUST be set to the numeric value that is contained in the <Type> element.

        • The SRMPMessage.AuthenticationProviderName attribute MUST be set to the string value that is contained in the <Name> element.

      • The SRMPMessage.SourceMachineIdentifier attribute MUST be set to the GUID that is represented by the string value that is contained in the <SourceQmGuid> element.

      • If present, the contents of the <DestinationMqf> element MUST be parsed and assigned as follows:

        • A new collection of format names MUST be instantiated. For each member of the collection:

          • If the string that is contained in the <DestinationMqf> element begins with "http://" or "https://", the current collection element MUST be set to the substring beginning with the "http://" or "https://" prefix and terminated by a line-break character.

          • The collection index MUST be advanced by 1.

        • The SRMPMessage.DestinationMultiQueueFormatName attribute MUST be set to the new collection of format names.

      • If present, the contents of the <AdminMqf> element MUST be parsed and assigned as follows:

        • A new collection of format names MUST be instantiated. For each member of the collection:

          • If the string that is contained in the <AdminMqf> element begins with "http://" or "https://", the current collection element MUST be set to the substring beginning with the "http://" or "https://" prefix and terminated by a line-break character.

          • The collection index MUST be advanced by 1.

        • The SRMPMessage.AdministrationMultiQueueFormatName attribute MUST be set to the new collection of format names.

      • If present, the contents of the <ResponseMqf> element MUST be parsed and assigned as follows:

        • A new collection of format names MUST be instantiated. For each member of the collection:

          • If the string that is contained in the <ResponseMqf> element begins with "http://" or "https://", the current collection element MUST be set to the substring beginning with the "http://" or "https://" prefix and terminated by a line-break character.

          • The collection index MUST be advanced by 1.

        • The SRMPMessage.ResponseMultiQueueFormatName attribute MUST be set to the new collection of format names.

      • The SRMPMessage.TimeToReachQueue attribute MUST be set to the time span value that is the difference between the UTC date/time value that is contained in the <TTrq> element and the UTC date/time value that is contained in the <sentAt> element.