NSwag icon indicating copy to clipboard operation
NSwag copied to clipboard

'Schema reference path has not been resolved' in path referenced yaml file

Open mwijns opened this issue 4 years ago • 6 comments

When generating C# client code with the NSwag command line toolchain 13.9.2 Netcore31 from

root.yaml:

openapi: 3.0.2
paths:
  /test:
    $ref: './path.yaml#/paths/test'

path.yaml:

paths:
  test:
    get:
      requestBody:
        content:
          application/json:
            schema:
              $ref: './object.yaml#/components/schemas/TestRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: './object.yaml#/components/schemas/TestResponse'

object.yaml

components:
  schemas:
    TestRequest:
      type: object
      properties:
        version:
          type: integer
    TestResponse:
      type: object
      properties:
        version:
          type: integer

I get the following error:

  System.InvalidOperationException: The schema reference path './object.yaml#/components/schemas/TestResponse' has not been resolved.
     at NJsonSchema.JsonSchema.GetActualSchema(IList`1 checkedSchemas)
     at NJsonSchema.JsonSchema.get_ActualSchema()
     at NSwag.CodeGeneration.Models.ResponseModelBase..ctor(IOperationModel operationModel, OpenApiOperation operation, String statusCode, OpenApiResponse response, Boolean isPrimarySuccessResponse, JsonSchema exceptionSchema, TypeResolverBase resolver, CodeGeneratorSettingsBase settings, IClientGenerator generator) in C:\projects\nswag\src\NSwag.CodeGeneration\Models\ResponseModelBase.cs:line 52
     at NSwag.CodeGeneration.CSharp.Models.CSharpResponseModel..ctor(IOperationModel operationModel, OpenApiOperation operation, String statusCode, OpenApiResponse response, Boolean isPrimarySuccessResponse, JsonSchema exceptionSchema, IClientGenerator generator, TypeResolverBase resolver, CodeGeneratorSettingsBase settings) in C:\projects\nswag\src\NSwag.CodeGeneration.CSharp\Models\CSharpResponseModel.cs:line 32
     at NSwag.CodeGeneration.CSharp.Models.CSharpOperationModel.CreateResponseModel(OpenApiOperation operation, String statusCode, OpenApiResponse response, JsonSchema exceptionSchema, IClientGenerator generator, TypeResolverBase resolver, ClientGeneratorBaseSettings settings) in C:\projects\nswag\src\NSwag.CodeGeneration.CSharp\Models\CSharpOperationModel.cs:line 291
     at NSwag.CodeGeneration.Models.OperationModelBase`2.<>c__DisplayClass4_0.<.ctor>b__0(KeyValuePair`2 response) in C:\projects\nswag\src\NSwag.CodeGeneration\Models\OperationModelBase.cs:line 41
     at System.Linq.Enumerable.SelectEnumerableIterator`2.ToList()
     at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
     at NSwag.CodeGeneration.Models.OperationModelBase`2..ctor(JsonSchema exceptionSchema, OpenApiOperation operation, TypeResolverBase resolver, IClientGenerator generator, ClientGeneratorBaseSettings settings) in C:\projects\nswag\src\NSwag.CodeGeneration\Models\OperationModelBase.cs:line 40
     at NSwag.CodeGeneration.CSharp.Models.CSharpOperationModel..ctor(OpenApiOperation operation, CSharpGeneratorBaseSettings settings, CSharpGeneratorBase generator, CSharpTypeResolver resolver) in C:\projects\nswag\src\NSwag.CodeGeneration.CSharp\Models\CSharpOperationModel.cs:line 46
     at NSwag.CodeGeneration.CSharp.CSharpClientGenerator.CreateOperationModel(OpenApiOperation operation, ClientGeneratorBaseSettings settings) in C:\projects\nswag\src\NSwag.CodeGeneration.CSharp\CSharpClientGenerator.cs:line 78
     at NSwag.CodeGeneration.ClientGeneratorBase`3.<>c__DisplayClass16_0.<GetOperations>b__1(<>f__AnonymousType0`3 tuple) in C:\projects\nswag\src\NSwag.CodeGeneration\ClientGeneratorBase.cs:line 163
     at System.Linq.Enumerable.SelectEnumerableIterator`2.ToList()
     at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
     at NSwag.CodeGeneration.ClientGeneratorBase`3.GetOperations(OpenApiDocument document) in C:\projects\nswag\src\NSwag.CodeGeneration\ClientGeneratorBase.cs:line 152
     at NSwag.CodeGeneration.ClientGeneratorBase`3.GenerateAllClientTypes() in C:\projects\nswag\src\NSwag.CodeGeneration\ClientGeneratorBase.cs:line 106
     at NSwag.CodeGeneration.ClientGeneratorBase`3.GenerateFile(ClientGeneratorOutputType outputType) in C:\projects\nswag\src\NSwag.CodeGeneration\ClientGeneratorBase.cs:line 73
     at NSwag.Commands.CodeGeneration.SwaggerToCSharpClientCommand.GenerateContracts(Dictionary`2 result, CSharpClientGenerator clientGenerator) in C:\projects\nswag\src\NSwag.Commands\Commands\CodeGeneration\OpenApiToCSharpClientCommand.cs:line 286
     at NSwag.Commands.CodeGeneration.SwaggerToCSharpClientCommand.<RunAsync>b__92_0() in C:\projects\nswag\src\NSwag.Commands\Commands\CodeGeneration\OpenApiToCSharpClientCommand.cs:line 260
     at NSwag.Commands.CodeGeneration.SwaggerToCSharpClientCommand.RunAsync() in C:\projects\nswag\src\NSwag.Commands\Commands\CodeGeneration\OpenApiToCSharpClientCommand.cs:line 251
     at NSwag.Commands.CodeGeneration.SwaggerToCSharpClientCommand.RunAsync(CommandLineProcessor processor, IConsoleHost host) in C:\projects\nswag\src\NSwag.Commands\Commands\CodeGeneration\OpenApiToCSharpClientCommand.cs:line 240
     at NSwag.Commands.NSwagDocument.ExecuteAsync() in C:\projects\nswag\src\NSwag.Commands\NSwagDocument.cs:line 85
     at NSwag.Commands.Document.ExecuteDocumentCommand.ExecuteDocumentAsync(IConsoleHost host, String filePath) in C:\projects\nswag\src\NSwag.Commands\Commands\Document\ExecuteDocumentCommand.cs:line 86
     at NSwag.Commands.Document.ExecuteDocumentCommand.RunAsync(CommandLineProcessor processor, IConsoleHost host) in C:\projects\nswag\src\NSwag.Commands\Commands\Document\ExecuteDocumentCommand.cs:line 32
     at NConsole.CommandLineProcessor.ProcessSingleAsync(String[] args, Object input)
     at NConsole.CommandLineProcessor.ProcessAsync(String[] args, Object input)
     at NConsole.CommandLineProcessor.Process(String[] args, Object input)
     at NSwag.Commands.NSwagCommandProcessor.Process(String[] args) in C:\projects\nswag\src\NSwag.Commands\NSwagCommandProcessor.cs:line 56

I saw that path reference support was added recently (#1953). When recreating the same case in ExternalReferenceTests.cs / path-reference.json no error is given. When generating from the same files with the 13.6.0 toolchain no error is given and the code is correctly generated.

mwijns avatar Nov 17 '20 14:11 mwijns