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.