Ejemplo n.º 1
0
        public void Match()
        {
            var extractors = new[] {
                new XPathExtractor(BizTalkFactoryProperties.SenderName.QName, "/letter/*/from", ExtractionMode.Promote),
                new XPathExtractor(BizTalkFactoryProperties.ReceiverName.QName, "/letter/*/to", ExtractionMode.Promote),
                new XPathExtractor(TrackingProperties.ProcessName.QName, "/letter/*/subject", ExtractionMode.Write),
                new XPathExtractor(TrackingProperties.Value1.QName, "/letter/*/paragraph", ExtractionMode.Write),
                new XPathExtractor(TrackingProperties.Value2.QName, "/letter/*/salutations", ExtractionMode.Write),
                new XPathExtractor(TrackingProperties.Value3.QName, "/letter/*/signature", ExtractionMode.Write)
            };

            var stream = XPathMutatorStreamFactory.Create(
                ResourceManager.Load("Data.UnqualifiedLetter.xml"),
                extractors,
                () => MessageContextMock.Object);

            stream.Drain();

            MessageContextMock.Verify(c => c.Promote(BizTalkFactoryProperties.SenderName, "*****@*****.**"));
            MessageContextMock.Verify(c => c.Promote(BizTalkFactoryProperties.ReceiverName, "*****@*****.**"));
            MessageContextMock.Verify(c => c.SetProperty(TrackingProperties.ProcessName, "inquiry"));
            MessageContextMock.Verify(c => c.SetProperty(TrackingProperties.Value1, "paragraph-one"));
            MessageContextMock.Verify(c => c.SetProperty(TrackingProperties.Value2, "King regards,"));
            MessageContextMock.Verify(c => c.SetProperty(TrackingProperties.Value3, "John Doe"));
        }
        public IBaseMessage Execute(IPipelineContext pipelineContext, IBaseMessage message)
        {
            if (pipelineContext == null)
            {
                throw new ArgumentNullException(nameof(pipelineContext));
            }
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }
            var extractors      = BuildPropertyExtractorCollection(pipelineContext, message);
            var xpathExtractors = extractors.OfType <XPathExtractor>().ToArray();
            var otherExtractors = extractors.Except(xpathExtractors).ToArray();

            if (otherExtractors.Any())
            {
                otherExtractors.ForEach(pe => pe.Execute(message.Context));
            }
            if (xpathExtractors.Any())
            {
                // setup a stream that will invoke our callback whenever an XPathExtractor's XPath expression is matched
                message.BodyPart.WrapOriginalDataStream(
                    originalStream => XPathMutatorStreamFactory.Create(
                        originalStream,
                        xpathExtractors,
                        () => message.Context),
                    pipelineContext.ResourceTracker);
            }
            return(message);
        }
Ejemplo n.º 3
0
        public void MatchForGroup()
        {
            var extractors = new[] {
                new XPathExtractor(BizTalkFactoryProperties.ContextBuilderTypeName.QName, "/letter/*/paragraph", ExtractionMode.Write),
                new XPathExtractor(BizTalkFactoryProperties.OutboundTransportLocation.QName, "/letter/*/paragraph", ExtractionMode.Write),
                new XPathExtractor(BizTalkFactoryProperties.MapTypeName.QName, "/letter/*/paragraph", ExtractionMode.Write)
            };

            using (var stream = XPathMutatorStreamFactory.Create(new StringStream(UNQUALIFIED_LETTER), extractors, () => MessageContextMock.Object))
            {
                stream.Drain();
            }

            MessageContextMock.Verify(c => c.SetProperty(BizTalkFactoryProperties.ContextBuilderTypeName, "paragraph-one"));
            MessageContextMock.Verify(c => c.SetProperty(BizTalkFactoryProperties.OutboundTransportLocation, "paragraph-one"));
            MessageContextMock.Verify(c => c.SetProperty(BizTalkFactoryProperties.MapTypeName, "paragraph-one"));
        }
Ejemplo n.º 4
0
        public void MatchWithPositionWhenQualified()
        {
            var extractors = new[] {
                new XPathExtractor(BizTalkFactoryProperties.ContextBuilderTypeName.QName, "/*[local-name()='letter']/*/*[local-name()='paragraph'][1]", ExtractionMode.Write),
                new XPathExtractor(BizTalkFactoryProperties.OutboundTransportLocation.QName, "/*[local-name()='letter']/*/*[local-name()='paragraph'][2]", ExtractionMode.Write),
                new XPathExtractor(BizTalkFactoryProperties.MapTypeName.QName, "/*[local-name()='letter']/*/*[local-name()='paragraph'][3]", ExtractionMode.Write)
            };

            using (var stream = XPathMutatorStreamFactory.Create(new StringStream(QUALIFIED_LETTER), extractors, () => MessageContextMock.Object))
            {
                stream.Drain();
            }

            // !!IMPORTANT!! XPathMutatorStream does not support such expressions and henceforth does not perform any succeeding match
            MessageContextMock.Verify(c => c.Promote(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object>()), Times.Never());
            MessageContextMock.Verify(c => c.Write(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object>()), Times.Never());
        }
Ejemplo n.º 5
0
        public void MatchQualified()
        {
            var extractors = new[] {
                new XPathExtractor(BizTalkFactoryProperties.ContextBuilderTypeName.QName, "/*[local-name()='letter']/*/*[local-name()='subject']", ExtractionMode.Write),
                new XPathExtractor(BizTalkFactoryProperties.OutboundTransportLocation.QName, "/*[local-name()='letter']/*/*[local-name()='paragraph']", ExtractionMode.Write),
                new XPathExtractor(BizTalkFactoryProperties.MapTypeName.QName, "/*[local-name()='letter']/*/*[local-name()='signature']", ExtractionMode.Write)
            };

            using (var stream = XPathMutatorStreamFactory.Create(new StringStream(QUALIFIED_LETTER), extractors, () => MessageContextMock.Object))
            {
                stream.Drain();
            }

            MessageContextMock.Verify(c => c.SetProperty(BizTalkFactoryProperties.ContextBuilderTypeName, "inquiry"));
            MessageContextMock.Verify(c => c.SetProperty(BizTalkFactoryProperties.OutboundTransportLocation, "paragraph-one"));
            MessageContextMock.Verify(c => c.SetProperty(BizTalkFactoryProperties.MapTypeName, "John Doe"));
        }
Ejemplo n.º 6
0
        public void MatchWithPositions()
        {
            var extractors = new[] {
                new XPathExtractor(TrackingProperties.Value1.QName, "/letter/*/paragraph[1]", ExtractionMode.Write),
                new XPathExtractor(TrackingProperties.Value2.QName, "/letter/*/paragraph[2]", ExtractionMode.Write),
                new XPathExtractor(TrackingProperties.Value3.QName, "/letter/*/paragraph[3]", ExtractionMode.Write)
            };

            var stream = XPathMutatorStreamFactory.Create(
                ResourceManager.Load("Data.UnqualifiedLetter.xml"),
                extractors,
                () => MessageContextMock.Object);

            stream.Drain();

            MessageContextMock.Verify(c => c.SetProperty(TrackingProperties.Value1, "paragraph-one"));
            MessageContextMock.Verify(c => c.SetProperty(TrackingProperties.Value2, "paragraph-two"));
            MessageContextMock.Verify(c => c.SetProperty(TrackingProperties.Value3, "paragraph-six"));
        }
Ejemplo n.º 7
0
        public void MatchQualifiedWithPosition()
        {
            var extractors = new[] {
                new XPathExtractor(TrackingProperties.Value1.QName, "/*[local-name()='letter']/*/*[local-name()='paragraph'][1]", ExtractionMode.Write),
                new XPathExtractor(TrackingProperties.Value2.QName, "/*[local-name()='letter']/*/*[local-name()='paragraph'][2]", ExtractionMode.Write),
                new XPathExtractor(TrackingProperties.Value3.QName, "/*[local-name()='letter']/*/*[local-name()='paragraph'][3]", ExtractionMode.Write)
            };

            var stream = XPathMutatorStreamFactory.Create(
                ResourceManager.Load("Data.QualifiedLetter.xml"),
                extractors,
                () => MessageContextMock.Object);

            stream.Drain();

            // !!IMPORTANT!! XPathMutatorStream does not support such expressions and henceforth does not perform any succeeding match
            MessageContextMock.Verify(c => c.Promote(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object>()), Times.Never());
            MessageContextMock.Verify(c => c.Write(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object>()), Times.Never());
        }
Ejemplo n.º 8
0
        public void MatchQualified()
        {
            var extractors = new[] {
                new XPathExtractor(TrackingProperties.ProcessName.QName, "/*[local-name()='letter']/*/*[local-name()='subject']", ExtractionMode.Write),
                new XPathExtractor(TrackingProperties.Value1.QName, "/*[local-name()='letter']/*/*[local-name()='paragraph']", ExtractionMode.Write),
                new XPathExtractor(TrackingProperties.Value3.QName, "/*[local-name()='letter']/*/*[local-name()='signature']", ExtractionMode.Write)
            };

            var stream = XPathMutatorStreamFactory.Create(
                ResourceManager.Load("Data.QualifiedLetter.xml"),
                extractors,
                () => MessageContextMock.Object);

            stream.Drain();

            MessageContextMock.Verify(c => c.SetProperty(TrackingProperties.ProcessName, "inquiry"));
            MessageContextMock.Verify(c => c.SetProperty(TrackingProperties.Value1, "paragraph-one"));
            MessageContextMock.Verify(c => c.SetProperty(TrackingProperties.Value3, "John Doe"));
        }
Ejemplo n.º 9
0
        public void MatchAndDemote()
        {
            var extractors = new[] {
                new XPathExtractor(BizTalkFactoryProperties.ContextBuilderTypeName.QName, "/letter/*/paragraph[1]", ExtractionMode.Demote),
                new XPathExtractor(BizTalkFactoryProperties.ContextBuilderTypeName.QName, "/letter/*/paragraph[2]", ExtractionMode.Demote),
                new XPathExtractor(BizTalkFactoryProperties.ContextBuilderTypeName.QName, "/letter/*/paragraph[3]", ExtractionMode.Demote)
            };

            using (var stream = XPathMutatorStreamFactory.Create(new StringStream(UNQUALIFIED_LETTER), extractors, () => MessageContextMock.Object))
                using (var reader = new StreamReader(stream))
                {
                    MessageContextMock.Setup(c => c.GetProperty(BizTalkFactoryProperties.ContextBuilderTypeName)).Returns("same-paragraph");
                    reader.ReadToEnd()
                    .Should().Be(
                        UNQUALIFIED_LETTER
                        .Replace("paragraph-one", "same-paragraph")
                        .Replace("paragraph-two", "same-paragraph")
                        .Replace("paragraph-six", "same-paragraph")
                        );
                }
        }
Ejemplo n.º 10
0
        public void Match()
        {
            var extractors = new[] {
                new XPathExtractor(BizTalkFactoryProperties.ContextBuilderTypeName.QName, "/letter/*/from", ExtractionMode.Promote),
                new XPathExtractor(BizTalkFactoryProperties.OutboundTransportLocation.QName, "/letter/*/to", ExtractionMode.Promote),
                new XPathExtractor(SBMessagingProperties.ContentType.QName, "/letter/*/subject", ExtractionMode.Write),
                new XPathExtractor(SBMessagingProperties.CorrelationId.QName, "/letter/*/paragraph", ExtractionMode.Write),
                new XPathExtractor(SBMessagingProperties.Label.QName, "/letter/*/salutations", ExtractionMode.Write),
                new XPathExtractor(BtsProperties.Operation.QName, "/letter/*/signature", ExtractionMode.Write)
            };

            using (var stream = XPathMutatorStreamFactory.Create(new StringStream(UNQUALIFIED_LETTER), extractors, () => MessageContextMock.Object))
            {
                stream.Drain();
            }

            MessageContextMock.Verify(c => c.Promote(BizTalkFactoryProperties.ContextBuilderTypeName, "*****@*****.**"));
            MessageContextMock.Verify(c => c.Promote(BizTalkFactoryProperties.OutboundTransportLocation, "*****@*****.**"));
            MessageContextMock.Verify(c => c.SetProperty(SBMessagingProperties.ContentType, "inquiry"));
            MessageContextMock.Verify(c => c.SetProperty(SBMessagingProperties.CorrelationId, "paragraph-one"));
            MessageContextMock.Verify(c => c.SetProperty(SBMessagingProperties.Label, "King regards,"));
            MessageContextMock.Verify(c => c.SetProperty(BtsProperties.Operation, "John Doe"));
        }
Ejemplo n.º 11
0
        public void MatchAndDemote()
        {
            var extractors = new[] {
                new XPathExtractor(TrackingProperties.Value1.QName, "/letter/*/paragraph[1]", ExtractionMode.Demote),
                new XPathExtractor(TrackingProperties.Value1.QName, "/letter/*/paragraph[2]", ExtractionMode.Demote),
                new XPathExtractor(TrackingProperties.Value1.QName, "/letter/*/paragraph[3]", ExtractionMode.Demote)
            };

            using (var stream = XPathMutatorStreamFactory.Create(ResourceManager.Load("Data.UnqualifiedLetter.xml"), extractors, () => MessageContextMock.Object))
                using (var reader = new StreamReader(stream))
                {
                    MessageContextMock.Setup(c => c.GetProperty(TrackingProperties.Value1)).Returns("same-paragraph");
                    Assert.That(
                        reader.ReadToEnd(),
                        Is.EqualTo(
                            ResourceManager
                            .LoadString("Data.UnqualifiedLetter.xml")
                            .Substring(38)                             // skip xml declaration
                            .Replace("paragraph-one", "same-paragraph")
                            .Replace("paragraph-two", "same-paragraph")
                            .Replace("paragraph-six", "same-paragraph")
                            ));
                }
        }