Skip to content
This repository was archived by the owner on Sep 2, 2021. It is now read-only.

Commit 9fb99ec

Browse files
Merge pull request #19 from ParticularLabs/load-from-uri
Allow uri configuration for routing file path
2 parents d82bed1 + c318366 commit 9fb99ec

File tree

6 files changed

+44
-28
lines changed

6 files changed

+44
-28
lines changed

src/NServiceBus.FileBasedRouting.Tests/XmlRoutingFileAccessTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class XmlRoutingFileAccessTests
1010
[Test]
1111
public void Should_throw_when_file_not_found()
1212
{
13-
var fileAccess = new XmlRoutingFileAccess("non-existing.file");
13+
var fileAccess = new XmlRoutingFileAccess(new Uri("non-existing.file", UriKind.RelativeOrAbsolute));
1414

1515
Assert.Throws<FileNotFoundException>(() => fileAccess.Read());
1616
}
@@ -19,7 +19,7 @@ public void Should_throw_when_file_not_found()
1919
public void Should_return_loaded_document()
2020
{
2121
var fileName = "hello-world.xml";
22-
var fileAccess = new XmlRoutingFileAccess(fileName);
22+
var fileAccess = new XmlRoutingFileAccess(new Uri(fileName, UriKind.RelativeOrAbsolute));
2323

2424
File.WriteAllText(fileName, "<greeting>Hello World!</greeting>");
2525
try
@@ -38,7 +38,7 @@ public void Should_return_loaded_document()
3838
public void Should_load_valid_xml_content()
3939
{
4040
var fileName = "hello-world.html";
41-
var fileAccess = new XmlRoutingFileAccess(fileName);
41+
var fileAccess = new XmlRoutingFileAccess(new Uri(fileName, UriKind.RelativeOrAbsolute));
4242

4343
File.WriteAllText(fileName, "<h1>Hello World!</h1>");
4444
try
@@ -57,7 +57,7 @@ public void Should_load_valid_xml_content()
5757
public void Should_throw_when_file_contains_no_xml_content()
5858
{
5959
var fileName = "hello-world.txt";
60-
var fileAccess = new XmlRoutingFileAccess(fileName);
60+
var fileAccess = new XmlRoutingFileAccess(new Uri(fileName, UriKind.RelativeOrAbsolute));
6161

6262
File.WriteAllText(fileName, "Hello World!");
6363
try

src/NServiceBus.FileBasedRouting/FileBasedRoutingConfigExtensions.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using NServiceBus.Configuration.AdvanceExtensibility;
2+
using System;
23

34
namespace NServiceBus.FileBasedRouting
45
{
@@ -22,7 +23,17 @@ public static void UseFileBasedRouting(this RoutingSettings config)
2223
/// <param name="configurationFilePath">The path to the configuration file.</param>
2324
public static void UseFileBasedRouting(this RoutingSettings config, string configurationFilePath)
2425
{
25-
config.GetSettings().Set(FileBasedRoutingFeature.RoutingFilePathKey, configurationFilePath);
26+
config.UseFileBasedRouting(UriHelper.FilePathToUri(configurationFilePath));
27+
}
28+
29+
/// <summary>
30+
/// Enables routing configured with the routing configuration file under <paramref name="configurationFileUri"/>
31+
/// </summary>
32+
/// <param name="config">The configuration object.</param>
33+
/// <param name="configurationFileUri">The <see cref="Uri"/> to the configuration file.</param>
34+
public static void UseFileBasedRouting(this RoutingSettings config, Uri configurationFileUri)
35+
{
36+
config.GetSettings().Set(FileBasedRoutingFeature.RoutingFilePathKey, configurationFileUri);
2637
config.GetSettings().EnableFeatureByDefault<FileBasedRoutingFeature>();
2738
}
2839
}

src/NServiceBus.FileBasedRouting/FileBasedRoutingFeature.cs

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,21 @@
55
using NServiceBus.Features;
66
using NServiceBus.Routing;
77
using NServiceBus.Transport;
8+
using NServiceBus.Logging;
89

910
namespace NServiceBus.FileBasedRouting
1011
{
11-
using System.IO;
12-
using Logging;
13-
1412
class FileBasedRoutingFeature : Feature
1513
{
1614
static ILog log = LogManager.GetLogger<FileBasedRoutingFeature>();
1715

18-
public const string RoutingFilePathKey = "NServiceBus.FileBasedRouting.RoutingFilePath";
16+
public const string RoutingFilePathKey = "NServiceBus.FileBasedRouting.RoutingFileUri";
1917

2018
public FileBasedRoutingFeature()
2119
{
2220
Defaults(s=>
2321
{
24-
s.SetDefault(RoutingFilePathKey, "endpoints.xml");
22+
s.SetDefault(RoutingFilePathKey, UriHelper.FilePathToUri("endpoints.xml"));
2523
s.SetDefault<UnicastSubscriberTable>(new UnicastSubscriberTable());
2624
});
2725
}
@@ -33,8 +31,8 @@ protected override void Setup(FeatureConfigurationContext context)
3331
var unicastRoutingTable = context.Settings.Get<UnicastRoutingTable>();
3432
var unicastSubscriberTable = context.Settings.Get<UnicastSubscriberTable>();
3533

36-
var routingFilePath = GetRoutingFilePath(context);
37-
var routingFile = new XmlRoutingFileAccess(routingFilePath);
34+
var routingFileUri = context.Settings.Get<Uri>(RoutingFilePathKey);
35+
var routingFile = new XmlRoutingFileAccess(routingFileUri);
3836
var routingFileParser = new XmlRoutingFileParser();
3937

4038
var nativeSends = transportInfrastructure.OutboundRoutingPolicy.Sends == OutboundRoutingType.Multicast;
@@ -61,12 +59,6 @@ protected override void Setup(FeatureConfigurationContext context)
6159
}
6260
}
6361

64-
static string GetRoutingFilePath(FeatureConfigurationContext context)
65-
{
66-
var configuredRoutingFilePath = context.Settings.Get<string>(RoutingFilePathKey);
67-
return Path.IsPathRooted(configuredRoutingFilePath) ? configuredRoutingFilePath : Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configuredRoutingFilePath);
68-
}
69-
7062
static void UpdateRoutingTable(XmlRoutingFileParser routingFileParser, XmlRoutingFileAccess routingFile, UnicastRoutingTable routingTable, UnicastSubscriberTable subscriberTable, bool nativeSends, bool nativePublishes)
7163
{
7264
var endpoints = routingFileParser.Parse(routingFile.Read());
@@ -81,7 +73,7 @@ static void UpdateRoutingTable(XmlRoutingFileParser routingFileParser, XmlRoutin
8173
{
8274
if (nativeSends)
8375
{
84-
log.Warn($"Selected transport uses native command routing. Route for {commandType.FullName} to {endpoint.LogicalEndpointName} configured in {routingFile.FilePath} will be ignored.");
76+
log.Warn($"Selected transport uses native command routing. Route for {commandType.FullName} to {endpoint.LogicalEndpointName} configured in {routingFile.FileUri} will be ignored.");
8577
}
8678
commandRoutes.Add(new RouteTableEntry(commandType, route));
8779
}
@@ -90,7 +82,7 @@ static void UpdateRoutingTable(XmlRoutingFileParser routingFileParser, XmlRoutin
9082
{
9183
if (nativePublishes)
9284
{
93-
log.Warn($"Selected transport uses native event routing. Route for {eventType.FullName} to {endpoint.LogicalEndpointName} configured in {routingFile.FilePath} will be ignored.");
85+
log.Warn($"Selected transport uses native event routing. Route for {eventType.FullName} to {endpoint.LogicalEndpointName} configured in {routingFile.FileUri} will be ignored.");
9486
}
9587
eventRoutes.Add(new RouteTableEntry(eventType, route));
9688
}

src/NServiceBus.FileBasedRouting/NServiceBus.FileBasedRouting.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
</ItemGroup>
4848
<ItemGroup>
4949
<Compile Include="Properties\AssemblyInfo.cs" />
50+
<Compile Include="UriHelper.cs" />
5051
<Compile Include="XmlRoutingFileAccess.cs" />
5152
<Compile Include="UnicastRouteGroup.cs" />
5253
<Compile Include="EndpointRoutingConfiguration.cs" />
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace NServiceBus.FileBasedRouting
2+
{
3+
using System;
4+
using System.IO;
5+
6+
class UriHelper
7+
{
8+
public static Uri FilePathToUri(string filePath)
9+
{
10+
var absoluteFilePath = Path.IsPathRooted(filePath)
11+
? filePath
12+
: Path.Combine(AppDomain.CurrentDomain.BaseDirectory, filePath);
13+
return new Uri(absoluteFilePath, UriKind.Absolute);
14+
}
15+
}
16+
}

src/NServiceBus.FileBasedRouting/XmlRoutingFileAccess.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,23 @@
11
namespace NServiceBus.FileBasedRouting
22
{
33
using System;
4-
using System.IO;
54
using System.Xml;
65
using System.Xml.Linq;
76

87
class XmlRoutingFileAccess
98
{
10-
public string FilePath { get; }
9+
public Uri FileUri { get; }
1110

12-
public XmlRoutingFileAccess(string filePath)
11+
public XmlRoutingFileAccess(Uri fileUri)
1312
{
14-
FilePath = filePath;
13+
FileUri = fileUri;
1514
}
1615

1716
public XDocument Read()
1817
{
1918
try
2019
{
21-
using (var fileStream = File.OpenRead(FilePath))
22-
{
23-
return XDocument.Load(fileStream);
24-
}
20+
return XDocument.Load(FileUri.ToString());
2521
}
2622
catch (XmlException e)
2723
{

0 commit comments

Comments
 (0)