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);
        }
示例#3
0
        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));
 }