Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swagger Resolver error, Could not resolve reference:

I'm setting up a new asp.net core 3.1 project, exposing a RESTful API in FHIR format, which is a format extending JSON.
I'd like to make a simple UI available with SwaggerUI. That's where I've got an issue that errors are being shown.

When launching SwaggerUI, there are no errors. When expanding the single available POST request, these errors show up: enter image description here

Full list:

Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.parameter.items.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.parameter.items.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.idElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.idElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.meta.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.meta.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.implicitRulesElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.implicitRulesElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.languageElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.languageElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.identifier.properties.assigner.properties.identifier.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.identifier.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.identifier.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.typeElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.typeElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.timestampElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.timestampElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.totalElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.totalElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.link.items.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.link.items.properties.modifierExtension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.link.items.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.entry.items.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.entry.items.properties.modifierExtension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.entry.items.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.signature.properties.who.properties.identifier.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.signature.properties.onBehalfOf.properties.identifier.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.signature.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.signature.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.parameter.items.properties.nameElement.properties.extension.items.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.parameter.items.properties.nameElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.parameter.items.properties.nameElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.parameter.items.properties.value.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.parameter.items.properties.value.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.parameter.items.properties.resource.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.parameter.items.properties.resource.properties.idElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.parameter.items.properties.part.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.parameter.items.properties.modifierExtension.items.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.meta.properties.profileElement.items.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.meta.properties.profileElement.items.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.meta.properties.security.items.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.application/json.schema.properties.meta.properties.security.items.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.parameter.items.properties.modifierExtension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.meta.properties.security.items.properties.userSelectedElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.requestBody.content.text/json.schema.properties.meta.properties.security.items.properties.userSelectedElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.identifier.properties.useElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.identifier.properties.useElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.identifier.properties.type.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.identifier.properties.type.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.identifier.properties.period.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.identifier.properties.period.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.identifier.properties.assigner.properties.identifier.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.identifier.properties.assigner.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.identifier.properties.assigner.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.entry.items.properties.search.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.entry.items.properties.search.properties.modifierExtension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.entry.items.properties.search.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.entry.items.properties.request.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.entry.items.properties.request.properties.modifierExtension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.entry.items.properties.request.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.entry.items.properties.response.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.entry.items.properties.response.properties.modifierExtension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.entry.items.properties.response.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.signature.properties.dataElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.text/plain.schema.properties.signature.properties.dataElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.identifier.properties.period.properties.startElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.identifier.properties.period.properties.startElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.entry.items.properties.search.properties.modeElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.entry.items.properties.search.properties.modeElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.entry.items.properties.search.properties.scoreElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.entry.items.properties.search.properties.scoreElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.entry.items.properties.request.properties.methodElement.properties.extension.items.properties.extension.items.$ref
Could not resolve reference:
Resolver error at paths./Bundle/$analyze.post.responses.200.content.application/json.schema.properties.entry.items.properties.request.properties.methodElement.properties.children.items.properties.children.items.$ref
Could not resolve reference:

The controller method:

    [HttpPost("$analyze")]
    public async Task<ActionResult<Bundle>> Analyze([FromBody]Parameters parameters)
    {
        [...]
        return Ok();
    }

The input (Parameters) and output (Bundle) parameters are objects contained in Hl7.Fhir.R4 (nuget, source)

Following packages are being used:
enter image description here

swagger.json (truncated, as it was too long to be posted):

{
  "openapi": "3.0.1",
  "info": {
    "title": "Analyzer",
    "version": "v1"
  },
  "paths": {
    "/Bundle/$analyze": {
      "post": {
        "tags": [
          "Bundle"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Parameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Parameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Parameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Bundle"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bundle"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bundle"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ResourceType": {
        "enum": [
          "Account",
          "ActivityDefinition",
          "AdverseEvent",
          "AllergyIntolerance",
          "Appointment",
          "AppointmentResponse",
          "AuditEvent",
          "Basic",
          "Binary",
          "BiologicallyDerivedProduct",
          "BodyStructure",
          "Bundle",
          "CapabilityStatement",
          "CarePlan",
          "CareTeam",
          "CatalogEntry",
          "ChargeItem",
          "ChargeItemDefinition",
          "Claim",
          "ClaimResponse",
          "ClinicalImpression",
          "CodeSystem",
          "Communication",
          "CommunicationRequest",
          "CompartmentDefinition",
          "Composition",
          "ConceptMap",
          "Condition",
          "Consent",
          "Contract",
          "Coverage",
          "CoverageEligibilityRequest",
          "CoverageEligibilityResponse",
          "DetectedIssue",
          "Device",
          "DeviceDefinition",
          "DeviceMetric",
          "DeviceRequest",
          "DeviceUseStatement",
          "DiagnosticReport",
          "DocumentManifest",
          "DocumentReference",
          "DomainResource",
          "EffectEvidenceSynthesis",
          "Encounter",
          [...]
        ],
        "type": "string"
      },
      "ElementValue": {
        "type": "object"
      },
      "Base": {
        "type": "object",
        "properties": {
          "typeName": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Base"
            },
            "nullable": true,
            "readOnly": true
          },
          "namedChildren": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ElementValue"
            },
            "nullable": true,
            "readOnly": true
          },
          "userData": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "nullable": true,
            "readOnly": true,
            "deprecated": true
          }
        }
      },
      "Element": {
        "type": "object",
        "properties": {
          "typeName": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Base"
            },
            "nullable": true,
            "readOnly": true
          },
          "namedChildren": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ElementValue"
            },
            "nullable": true,
            "readOnly": true
          },
          "elementId": {
            "type": "string",
            "nullable": true
          },
          "extension": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Extension"
            },
            "nullable": true
          },
          "userData": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "nullable": true,
            "readOnly": true,
            "deprecated": true
          }
        }
      },
      "Extension": {
        "type": "object",
        "properties": {
          "typeName": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "url": {
            "type": "string",
            "nullable": true
          },
          "value": {
            "$ref": "#/components/schemas/Element"
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Base"
            },
            "nullable": true,
            "readOnly": true
          },
          "namedChildren": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ElementValue"
            },
            "nullable": true,
            "readOnly": true
          },
          "elementId": {
            "type": "string",
            "nullable": true
          },
          "extension": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Extension"
            },
            "nullable": true
          },
          "userData": {
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "nullable": true,
            "readOnly": true,
            "deprecated": true
          }
        }
      },
      [...]

When testing the function, everything works fine.

What is SwaggerUI trying to tell me and how can I fix these errors? Any hint would be appreciated

like image 353
Philippe Avatar asked Mar 27 '20 08:03

Philippe


2 Answers

This issue resolved itself with the latest swashbuckle version

like image 53
Philippe Avatar answered Oct 17 '22 05:10

Philippe


The call of UseInlineDefinitionsForEnums helped to eliminate similar Resolver error at paths...Could not resolve reference:... in my case.

The error was:

Errors
Hide
 
Resolver error at paths./api/v1/Account/IsTenantAvailable.post.responses.200.content.text/plain.schema.properties.state.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/TenantAvailabilityState does not exist in document
Resolver error at paths./api/v1/Account/IsTenantAvailable.post.responses.200.content.application/json.schema.properties.state.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/TenantAvailabilityState does not exist in document
Resolver error at paths./api/v1/Account/IsTenantAvailable.post.responses.200.content.text/json.schema.properties.state.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/TenantAvailabilityState does not exist in document

enter image description here

The introduced call was:

using Microsoft.Extensions.DependencyInjection;

public class Startup
{
    // ...
    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        // ...
        services.AddSwaggerGen(options =>
            {
                // ...

                // calling SwaggerGenOptionsExtensions.UseInlineDefinitionsForEnums(Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenOptions) instead of some UseReferencedDefinitionsForEnums
                options.UseInlineDefinitionsForEnums(); // options.UseReferencedDefinitionsForEnums();

                // ...
            }
        // ...
    }
}

The call was inserted instead of commented out call of UseReferencedDefinitionsForEnums. It was commented out because of upgrading aspnetcore to 3.1 in my solution. The version that worked with 3.1 just did not contain this method any more, without any note about what should be called instead.

It is clear that both calls are related to enums. But I have no idea what exactly and why do they do, if they are for the same purpose and if they have any undesired side effects. But it just worked in context of eliminating this red plate in the screenshot on pressing "Try it out" on many of my endpoints.

I faced the issue on the version 5.6.3 of Swashbuckle.AspNetCore. Upgrading to the latest 6.1.1 did not make any help.

like image 2
moudrick Avatar answered Oct 17 '22 05:10

moudrick