I really like TDD (Test Driven Design) and like to push messages through the system as soon as possible.
I have really enjoyed using Powershell to drive the input of XML files into file receive locations. Here are two of the simplest recipes.
Repeatedly dropping the same file
This will copy a single file one hundred times, each with a different numeric filename (i.e. 1.xml, 2.xml, etc...)
for($i = 0; $i -le 100; $ += 1)
{
Copy-Item .\SampleMsg.xml C:\FileDrop\IN\msg_$i.xml
if($i % 10 -eq 0) { $i }
}
# this is a MS-DOS PAUSE command equivalent
Write-Host -NoNewLine "Press any key to continue"
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Write-Host ""
Dropping Templated variants from a CSV data file
We have a simple template XML file that contains the following:
<ns0:UnaryMathsRequest xmlns:ns0="http://transluceo.co.uk/Maths/">
<SourceName>Data_0</SourceName>
<Operation>Data_0</Operation>
<Variable>0.0</Varaible>
</ns0:UnaryMathsRequest>
We also have a CSV file that contains the following:
FileName,SourceName,Operation,Variable
AAAA.xml,ACME Holdings,Factorial,2.0
AAAB.xml,Ludite Enterprises,Inverse,2.34
AAAC.xml,Quaint Commerce,Squared,34.3
We can use this Powershell script to drop named copies of the files into the drop location.
$files = Import-Csv .\DataFile.csv
for-each($line in $files)
{
$template = [xml](get-content .\TemplateFile.xml);
$template.UnaryMathsRequest.SourceName = $line.SourceName;
$template.UnaryMathsRequest.Operation = $line.Operation;
$template.UnaryMathsRequest.Variable = $line.Variable;
$out = $template.get_InnerXML();
$path = "C:\FileDrop\IN\" + $line.FileName;
set-content $path $out;
}
Voila! Three files duly copied to the receive location.