-
-
Notifications
You must be signed in to change notification settings - Fork 7.4k
Description
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.