diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/OpenAPI31Traverser.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/OpenAPI31Traverser.java index ca61dac25b..ddcb08ba69 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/OpenAPI31Traverser.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/OpenAPI31Traverser.java @@ -794,6 +794,9 @@ public Schema traverseSchema(Schema schema, ReferenceVisitor visitor, List m.contains("Could not find /$defs")), + "Expected no $defs resolution errors when resolving external schema with $id, but got: " + + result.getMessages()); + } + public void compare(String dir, SwaggerParseResult result) throws Exception { ObjectMapper mapper = Json31.mapper().copy(); mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); diff --git a/modules/swagger-parser-v3/src/test/resources/3.1.0/dereference/schema/external-oas-with-id-defs/oas.yaml b/modules/swagger-parser-v3/src/test/resources/3.1.0/dereference/schema/external-oas-with-id-defs/oas.yaml new file mode 100644 index 0000000000..c56e7020e6 --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/3.1.0/dereference/schema/external-oas-with-id-defs/oas.yaml @@ -0,0 +1,29 @@ +$id: 'https://spec.openapis.org/oas/3.1/schema/2022-10-07' +$schema: 'https://json-schema.org/draft/2020-12/schema' +type: object +properties: + info: + $ref: '#/$defs/info' + servers: + type: array + items: + $ref: '#/$defs/server' +$ref: '#/$defs/extensions' +$defs: + info: + type: object + properties: + title: + type: string + required: + - title + server: + type: object + properties: + url: + type: string + required: + - url + extensions: + patternProperties: + '^x-': true diff --git a/modules/swagger-parser-v3/src/test/resources/3.1.0/dereference/schema/external-oas-with-id-defs/root.yaml b/modules/swagger-parser-v3/src/test/resources/3.1.0/dereference/schema/external-oas-with-id-defs/root.yaml new file mode 100644 index 0000000000..bab97faf48 --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/3.1.0/dereference/schema/external-oas-with-id-defs/root.yaml @@ -0,0 +1,31 @@ +openapi: 3.1.0 +info: + title: Test external OAI schema with $id and $defs resolution + 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 + schema: + $ref: "#/components/schemas/OpenApiSchema" + schemas: + OpenApiSchema: + $ref: "http://localhost:${dynamicPort}/oai-v3.1-schema.yaml" \ No newline at end of file