From 14d8595643c2e7ef2304c79426d59ffb0c95058d Mon Sep 17 00:00:00 2001 From: Oleksandr Dudarenko Date: Mon, 9 Jan 2023 23:56:20 +0100 Subject: [PATCH] When CSDL filter and http resource supplied for HIDI input, it fails because ApplyFilter expects a local file but not a URL address #1124 --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 60bba4aef..58b0a7733 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -98,7 +98,7 @@ CancellationToken cancellationToken if (!string.IsNullOrEmpty(csdlFilter)) { XslCompiledTransform transform = GetFilterTransform(); - stream = ApplyFilter(csdl, csdlFilter, transform); + stream = csdl.StartsWith("http") ? ApplyFilter(stream, csdlFilter, transform) : ApplyFilter(csdl, csdlFilter, transform); stream.Position = 0; } @@ -235,10 +235,9 @@ private static XslCompiledTransform GetFilterTransform() return transform; } - private static Stream ApplyFilter(string csdl, string entitySetOrSingleton, XslCompiledTransform transform) + private static Stream ApplyFilterForStreamReader(StreamReader inputReader, string entitySetOrSingleton, XslCompiledTransform transform) { Stream stream; - StreamReader inputReader = new(csdl); XmlReader inputXmlReader = XmlReader.Create(inputReader); MemoryStream filteredStream = new(); StreamWriter writer = new(filteredStream); @@ -246,9 +245,22 @@ private static Stream ApplyFilter(string csdl, string entitySetOrSingleton, XslC args.AddParam("entitySetOrSingleton", "", entitySetOrSingleton); transform.Transform(inputXmlReader, args, writer); stream = filteredStream; + return stream; } + private static Stream ApplyFilter(string csdl, string entitySetOrSingleton, XslCompiledTransform transform) + { + StreamReader inputReader = new(csdl); + return ApplyFilterForStreamReader(inputReader, entitySetOrSingleton, transform); + } + + private static Stream ApplyFilter(Stream csdlStream, string entitySetOrSingleton, XslCompiledTransform transform) + { + StreamReader inputReader = new(csdlStream); + return ApplyFilterForStreamReader(inputReader, entitySetOrSingleton, transform); + } + /// /// Implementation of the validate command ///