public IBaseMessage GetNext(IPipelineContext pContext) { if (messages == null) { messages = new Queue <IBaseMessage>(); IBaseMessage msgS1 = null; while ((msgS1 = ffDasmPC.GetNext(pContext)) != null) { XmlDasmComp xmlDasmPC = new XmlDasmComp(); SetXmlDasmProperties(xmlDasmPC); xmlDasmPC.Disassemble(pContext, msgS1); IBaseMessage msgS2 = null; while ((msgS2 = xmlDasmPC.GetNext(pContext)) != null) { messages.Enqueue(msgS2); } } } if (messages.Count > 0) { return(messages.Dequeue()); } return(null); }
/// <summary> /// Promotes properties defined in an XSD schema for an XML message. /// </summary> /// <param name="message">the XML message.</param> /// <param name="pc">Pipeline context.</param> /// <returns>The message with promoted properties.</returns> public static IBaseMessage PromotePropertiesBySchema(this IBaseMessage message, IPipelineContext pc) { // Write the PromotePropertiesOnly property on the message message.Context.Write("PromotePropertiesOnly", Resources.UriXmlNormProperties, true); var xmlDasmComp = new XmlDasmComp { AllowUnrecognizedMessage = true, ValidateDocument = false }; xmlDasmComp.Disassemble(pc, message); var outMsg = xmlDasmComp.GetNext(pc); outMsg.BodyPart.Data.Position = 0; return(outMsg); }
IBaseMessage GetNextMessage(IPipelineContext pContext) { IBaseMessage outMsg = null; if (childReader == null || childReader.EOF) { baseMsg = innerDasm.GetNext(pContext); if (baseMsg == null) { return(baseMsg); } childReader = XmlReader.Create(baseMsg.BodyPart.GetOriginalDataStream()); } while (childReader.Read()) { MessageType msgType = new MessageType { RootName = childReader.LocalName , TargetNamespace = childReader.NamespaceURI }; if (messageTypes.ContainsKey(msgType)) { currDocument = messageTypes[msgType]; //Is used XmlTranslatorStream as it is the only one i could find that takes an XmlReader as input //At this point i did not want to write my own custom stream // XmlTranslatorStream trans = new XmlTranslatorStream(childReader.ReadSubtree()); outMsg = CreateMessage(pContext, childReader); break; } } if (outMsg == null) { outMsg = GetNextMessage(pContext); //make sure there is no more messages in base queue } return(outMsg); //return null if the message is null, but check if there exists more enveloped messages }
public Microsoft.BizTalk.Message.Interop.IBaseMessage GetNext(IPipelineContext pContext) { return(_xmlDissambler.GetNext(pContext)); }