Skip to content

[BUG] Validation behavior change between 7.13.0 and 7.14.0 against an ISO spec. OpenAPI schema #22948

@thatsdone

Description

@thatsdone

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator?
  • Have you tested with the latest master to confirm the issue still exists?
  • Have you searched for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description

Validation behavior against an ISO spec (SOVD OpenAPI specification) fails after openapi-generator 7.14.0.

openapi-generator version

7.13.0 -> validation succeeds
7.14.0 -> validation fails

OpenAPI declaration file content or url

The below is a very simplified version of the SOVD (ISO 17978) API OpenAPI schema available at:
https://standards.iso.org/iso/17978/

The original lines/files are described in-line in the below YAML.
As you can see below, the issue comes from a reference against the upstream OpenAPI schema itself.

Right now, I'm not sure if this issue belongs to the ISO SOVD OpenAPI spec. side or openapi-generator side.
If it's spec. side, I can feedback to the standardization body folks.

openapi: 3.1.0
info:
  title: simple OpenAPI schema to reproduce an issue between 7.13 and 7.14
  description: >-
    This simple.yaml is intended for reproducing issues to process the OpenAPI definition available at
    'https://standards.iso.org/iso/17978/-3/ed-1/en/ISO%2017978-3%20ed.1%20-%20openapi-specification-1.1.0-rc1.zip'
  version: 1.0.0
paths:
  /hello:
    get:
      operationId: hello
      responses:
        "200":
          description: A successful response
          $ref: '#/components/responses/Data'
components:
  responses:
    Data:
      description: Description of the response
      content:
        application/json:
          schema:
            type: object
            required:
              - items
            properties:
              items:
                message:
                  type: string
                  example: "Hello, world!"
              schema:
                $ref: "#/components/schemas/OpenApiSchema"
  schemas:
    OpenApiSchema:
      # validation fails for below (capability-description/capability-description.yaml)
      $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/refs/tags/3.1.1/schemas/v3.1/schema.yaml"
      # validation succeeds for below (commons/types.yaml)
      #$ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/refs/tags/3.1.1/schemas/v3.1/schema.yaml#/$defs/schema"
Generation Details

Error logs look like below.

validation logs
$ java -jar openapi-generator-cli-7.13.0.jar  validate -i simple.yaml
Validating spec (simple.yaml)
No validation issues detected.

$ java -jar openapi-generator-cli-7.14.0.jar  validate -i simple.yaml
Validating spec (simple.yaml)
[main] ERROR i.s.v.p.reference.ReferenceVisitor - Error resolving schema #/$defs/info
java.lang.RuntimeException: Could not find /$defs/info in contents of #/$defs/info
        at io.swagger.v3.parser.reference.ReferenceVisitor.resolveSchemaRef(ReferenceVisitor.java:253)
        at io.swagger.v3.parser.reference.ReferenceVisitor.visitSchema(ReferenceVisitor.java:141)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchema(OpenAPI31Traverser.java:801)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchemaMap(OpenAPI31Traverser.java:960)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchema(OpenAPI31Traverser.java:811)
        at io.swagger.v3.parser.reference.ReferenceVisitor.resolveSchemaRef(ReferenceVisitor.java:262)
        at io.swagger.v3.parser.reference.ReferenceVisitor.visitSchema(ReferenceVisitor.java:141)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchema(OpenAPI31Traverser.java:801)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchemaMap(OpenAPI31Traverser.java:960)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchema(OpenAPI31Traverser.java:811)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseMediaType(OpenAPI31Traverser.java:603)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseMap(OpenAPI31Traverser.java:947)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseResponse(OpenAPI31Traverser.java:299)
        at io.swagger.v3.parser.reference.ReferenceVisitor.resolveRef(ReferenceVisitor.java:210)
        at io.swagger.v3.parser.reference.ReferenceVisitor.visitResponse(ReferenceVisitor.java:152)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseResponse(OpenAPI31Traverser.java:289)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseMap(OpenAPI31Traverser.java:947)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseResponses(OpenAPI31Traverser.java:270)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseOperation(OpenAPI31Traverser.java:237)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traversePathItem(OpenAPI31Traverser.java:394)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseMap(OpenAPI31Traverser.java:947)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traversePaths(OpenAPI31Traverser.java:197)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseOpenApi(OpenAPI31Traverser.java:124)
        at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverse(OpenAPI31Traverser.java:65)
        at io.swagger.v3.parser.reference.OpenAPIDereferencer31.dereference(OpenAPIDereferencer31.java:74)
        at io.swagger.v3.parser.OpenAPIV3Parser.resolve(OpenAPIV3Parser.java:227)
        at io.swagger.v3.parser.OpenAPIV3Parser.readContents(OpenAPIV3Parser.java:183)
        at io.swagger.v3.parser.OpenAPIV3Parser.readLocation(OpenAPIV3Parser.java:97)
        at io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16)
        at org.openapitools.codegen.cmd.Validate.execute(Validate.java:61)
        at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
        at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:66)
(snip)

[main] WARN  o.o.codegen.utils.ModelUtils - Failed to get the schema name: #/$defs/info
[main] WARN  o.o.codegen.utils.ModelUtils - Failed to get the schema name: #/$defs/server
[main] WARN  o.o.codegen.utils.ModelUtils - Failed to get the schema name: #/$defs/paths
[main] WARN  o.o.codegen.utils.ModelUtils - Failed to get the schema name: #/$defs/path-item
[main] WARN  o.o.codegen.utils.ModelUtils - Failed to get the schema name: #/$defs/components
[main] WARN  o.o.codegen.utils.ModelUtils - Failed to get the schema name: #/$defs/security-requirement
[main] WARN  o.o.codegen.utils.ModelUtils - Failed to get the schema name: #/$defs/tag
[main] WARN  o.o.codegen.utils.ModelUtils - Failed to get the schema name: #/$defs/external-documentation
Errors:
        - Could not find /$defs/tag in contents of #/$defs/tag
        - Could not find /$defs/info in contents of #/$defs/info
        - Could not find /$defs/components in contents of #/$defs/components
        - Could not find /$defs/server in contents of #/$defs/server
        - Could not find /$defs/external-documentation in contents of #/$defs/external-documentation
        - Could not find /$defs/path-item in contents of #/$defs/path-item
        - Could not find /$defs/paths in contents of #/$defs/paths
        - Could not find /$defs/security-requirement in contents of #/$defs/security-requirement

[error] Spec has 8 errors.
$
Steps to reproduce

Please save the above YAML as a file, and validate it using openapi-generator-cli 7.13.0 and 7.14.0.

Validation succeeds for 7.13.0 and fails for 7.14.0 with errors below.

Related issues/PRs

I could not find related/similar issues.

Suggest a fix

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions