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 3340bee7fa5..a3597fa37f2 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 class CodegenConfigurator { 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 f0e9b63d5d4..551c613b1ca 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 class CodegenConfiguratorTest { 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 00000000000..ca2aef80890 --- /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 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 24752605bf8..20c05271ad5 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 24752605bf8..20c05271ad5 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 4a2c4b493e0..2990ede9e91 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 4a2c4b493e0..2990ede9e91 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