-
Notifications
You must be signed in to change notification settings - Fork 271
Closed
Description
Describe the bug
The OpenAPI definition at https://sandbox.bcda.cms.gov/api/v1/swagger/ looks like a valid one. But when trying to load it via OpenApiStreamReader
there's a NullReferenceException
at:
at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.<>c.<.cctor>b__84_50(OpenApiHeader p)
at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.ProcessAnyFields[T](MapNode mapNode, T domainObject, AnyFieldMap`1 anyFieldMap)
at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.LoadHeader(ParseNode node)
at Microsoft.OpenApi.Readers.ParseNodes.MapNode.<>c__DisplayClass6_0`1.<CreateMap>b__0(KeyValuePair`2 n)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector)
at Microsoft.OpenApi.Readers.ParseNodes.MapNode.CreateMap[T](Func`2 map)
at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.<>c.<.cctor>b__84_131(OpenApiResponse o, ParseNode n)
at Microsoft.OpenApi.Readers.ParseNodes.PropertyNode.ParseField[T](T parentInstance, IDictionary`2 fixedFields, IDictionary`2 patternFields)
at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.LoadResponse(ParseNode node)
at Microsoft.OpenApi.Readers.ParseNodes.MapNode.<>c__DisplayClass7_0`1.<CreateMapWithReference>b__0(KeyValuePair`2 n)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector)
at Microsoft.OpenApi.Readers.ParseNodes.MapNode.CreateMapWithReference[T](ReferenceType referenceType, Func`2 map)
at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.<>c.<.cctor>b__84_15(OpenApiDocument o, ParseNode n)
at Microsoft.OpenApi.Readers.ParseNodes.PropertyNode.ParseField[T](T parentInstance, IDictionary`2 fixedFields, IDictionary`2 patternFields)
at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.ParseMap[T](MapNode mapNode, T domainObject, FixedFieldMap`1 fixedFieldMap, PatternFieldMap`1 patternFieldMap, List`1 requiredFields)
at Microsoft.OpenApi.Readers.V2.OpenApiV2Deserializer.LoadOpenApi(RootNode rootNode)
at Microsoft.OpenApi.Readers.V2.OpenApiV2VersionService.LoadDocument(RootNode rootNode)
at Microsoft.OpenApi.Readers.ParsingContext.Parse(YamlDocument yamlDocument)
at Microsoft.OpenApi.Readers.OpenApiYamlDocumentReader.Read(YamlDocument input, OpenApiDiagnostic& diagnostic)
at Microsoft.OpenApi.Readers.OpenApiTextReaderReader.Read(TextReader input, OpenApiDiagnostic& diagnostic)
at Microsoft.OpenApi.Readers.OpenApiStreamReader.Read(Stream input, OpenApiDiagnostic& diagnostic)
To Reproduce
Try to read the attached JSON definition swagger.zip (also available at https://sandbox.bcda.cms.gov/api/v1/swagger/swagger.json ) like this:
using System.Net;
using System.IO;
using Microsoft.OpenApi.Readers;
using Microsoft.OpenApi.Validations;
public static class Program
{
public static void Main()
{
const string url = @"https://sandbox.bcda.cms.gov/api/v1/swagger/swagger.json";
OpenApiStreamReader reader = new OpenApiStreamReader(new OpenApiReaderSettings
{
RuleSet = new ValidationRuleSet()
});
Stream stream = ToStream(ReadTextFileFromWeb(url));
reader.Read(stream, out OpenApiDiagnostic _);
}
private static string ReadTextFileFromWeb(string uriString)
{
WebRequest request = WebRequest.Create(uriString);
WebResponse result = request.GetResponse();
using (WebResponse response = result)
{
Stream responseStream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(responseStream, true))
return reader.ReadToEnd();
}
}
private static Stream ToStream(string input)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(input ?? "");
writer.Flush();
stream.Position = 0;
return stream;
}
}
Metadata
Metadata
Assignees
Labels
type:bugA broken experienceA broken experience