From 9c920d73bdaff3fab534367e8ee66603c2d41871 Mon Sep 17 00:00:00 2001 From: James Shaw Date: Tue, 15 Jul 2025 16:51:07 +0100 Subject: [PATCH 1/2] set resolveResponses=true needed by swagger-parser>=2.1.23, see https://github.com/swagger-api/swagger-parser/pull/2127 --- .../codegen/config/CodegenConfigurator.java | 1 + .../config/CodegenConfiguratorTest.java | 12 +++++++++ .../src/test/resources/3_0/response-ref.yaml | 25 +++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 modules/openapi-generator/src/test/resources/3_0/response-ref.yaml diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfigurator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfigurator.java index 3340bee7fa51..a3597fa37f2e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfigurator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfigurator.java @@ -683,6 +683,7 @@ public Context toContext() { final List authorizationValues = AuthParser.parse(this.auth); ParseOptions options = new ParseOptions(); options.setResolve(true); + options.setResolveResponses(true); SwaggerParseResult result = new OpenAPIParser().readLocation(inputSpec, authorizationValues, options); // TODO: Move custom validations to a separate type as part of a "Workflow" diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/config/CodegenConfiguratorTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/config/CodegenConfiguratorTest.java index f0e9b63d5d49..551c613b1ca0 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/config/CodegenConfiguratorTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/config/CodegenConfiguratorTest.java @@ -16,6 +16,8 @@ package org.openapitools.codegen.config; +import io.swagger.v3.oas.models.OpenAPI; +import org.junit.jupiter.api.Assertions; import org.openapitools.codegen.ClientOptInput; import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenConstants; @@ -121,4 +123,14 @@ public void shouldSetConfigProperties() throws IOException { want(props, "foo", "bar"); want(props, "baz", "quux"); } + + @Test + public void resolvesResponses() { + @SuppressWarnings("unchecked") Context context = (Context) new CodegenConfigurator() + .setInputSpec("src/test/resources/3_0/response-ref.yaml") + .setGeneratorName("java") + .toContext(); + + Assertions.assertNotNull(context.getSpecDocument().getPaths().get("/hello").getGet().getResponses().get("200").getContent()); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/response-ref.yaml b/modules/openapi-generator/src/test/resources/3_0/response-ref.yaml new file mode 100644 index 000000000000..ca2aef808902 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/response-ref.yaml @@ -0,0 +1,25 @@ +openapi: 3.0.1 +info: + title: ping test + version: '1.0' +servers: + - url: 'http://localhost:8000/' +paths: + /hello: + get: + operationId: hello + responses: + '200': + $ref: "#/components/responses/refResponse" + +components: + responses: + refResponse: + description: a response specification `$ref`erenced from an operation + content: + application/json: + schema: + type: object + properties: + responseProperty: + type: string \ No newline at end of file From 596d358fba9e00941c908530e82cdca90aae1054 Mon Sep 17 00:00:00 2001 From: James Shaw Date: Thu, 17 Jul 2025 09:35:07 +0100 Subject: [PATCH 2/2] update samples --- .../src/main/resources/openapi.yaml | 14 ++++++++++++-- .../src/main/resources/openapi.yaml | 14 ++++++++++++-- .../server/petstore/go-api-server/api/openapi.yaml | 6 +++++- .../server/petstore/go-chi-server/api/openapi.yaml | 6 +++++- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/samples/openapi3/server/petstore/spring-boot-oneof-sealed/src/main/resources/openapi.yaml b/samples/openapi3/server/petstore/spring-boot-oneof-sealed/src/main/resources/openapi.yaml index 24752605bf87..20c05271ad5d 100644 --- a/samples/openapi3/server/petstore/spring-boot-oneof-sealed/src/main/resources/openapi.yaml +++ b/samples/openapi3/server/petstore/spring-boot-oneof-sealed/src/main/resources/openapi.yaml @@ -15,7 +15,13 @@ paths: operationId: getAllFoos responses: "200": - $ref: "#/components/responses/200FooArray" + content: + application/json;charset=utf-8: + schema: + items: + $ref: "#/components/schemas/FooRefOrValue" + type: array + description: Success summary: GET all Foos tags: - Foo @@ -29,7 +35,11 @@ paths: $ref: "#/components/requestBodies/Foo" responses: "201": - $ref: "#/components/responses/201Foo" + content: + application/json: + schema: + $ref: "#/components/schemas/FooRefOrValue" + description: Error summary: Create a Foo tags: - Foo diff --git a/samples/openapi3/server/petstore/spring-boot-oneof/src/main/resources/openapi.yaml b/samples/openapi3/server/petstore/spring-boot-oneof/src/main/resources/openapi.yaml index 24752605bf87..20c05271ad5d 100644 --- a/samples/openapi3/server/petstore/spring-boot-oneof/src/main/resources/openapi.yaml +++ b/samples/openapi3/server/petstore/spring-boot-oneof/src/main/resources/openapi.yaml @@ -15,7 +15,13 @@ paths: operationId: getAllFoos responses: "200": - $ref: "#/components/responses/200FooArray" + content: + application/json;charset=utf-8: + schema: + items: + $ref: "#/components/schemas/FooRefOrValue" + type: array + description: Success summary: GET all Foos tags: - Foo @@ -29,7 +35,11 @@ paths: $ref: "#/components/requestBodies/Foo" responses: "201": - $ref: "#/components/responses/201Foo" + content: + application/json: + schema: + $ref: "#/components/schemas/FooRefOrValue" + description: Error summary: Create a Foo tags: - Foo diff --git a/samples/server/petstore/go-api-server/api/openapi.yaml b/samples/server/petstore/go-api-server/api/openapi.yaml index 4a2c4b493e02..2990ede9e914 100644 --- a/samples/server/petstore/go-api-server/api/openapi.yaml +++ b/samples/server/petstore/go-api-server/api/openapi.yaml @@ -918,7 +918,11 @@ paths: $ref: "#/components/requestBodies/TestBody" responses: "200": - $ref: "#/components/responses/SuccessfulOp" + content: + application/json: + schema: + type: bool + description: Successful Operation summary: POST a test batch tags: - fake diff --git a/samples/server/petstore/go-chi-server/api/openapi.yaml b/samples/server/petstore/go-chi-server/api/openapi.yaml index 4a2c4b493e02..2990ede9e914 100644 --- a/samples/server/petstore/go-chi-server/api/openapi.yaml +++ b/samples/server/petstore/go-chi-server/api/openapi.yaml @@ -918,7 +918,11 @@ paths: $ref: "#/components/requestBodies/TestBody" responses: "200": - $ref: "#/components/responses/SuccessfulOp" + content: + application/json: + schema: + type: bool + description: Successful Operation summary: POST a test batch tags: - fake