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); }
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")); }
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()); }
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")); }
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")); }
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()); }
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")); }
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") ); } }
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")); }
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") )); } }