From e876fc09966da1a50bb6d7e36a6b831c436eb208 Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 26 Nov 2018 16:34:36 +0100 Subject: [PATCH] ref #3029 - fix ref parameter resolving --- .../v3/jaxrs2/DefaultParameterExtension.java | 5 +- .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 56 +++++++++++++++++++ .../resources/RefParameter3029Resource.java | 32 +++++++++++ 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/RefParameter3029Resource.java diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java index cfda140b35..0e9b53ac92 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java @@ -93,6 +93,9 @@ public ResolvedParameter extractParameters(List annotations, if (parameter == null) { parameter = new Parameter(); } + if (StringUtils.isNotBlank(((io.swagger.v3.oas.annotations.Parameter) annotation).ref())) { + parameter.$ref(((io.swagger.v3.oas.annotations.Parameter) annotation).ref()); + } } else { List formParameters = new ArrayList<>(); List parameters = new ArrayList<>(); @@ -107,7 +110,7 @@ public ResolvedParameter extractParameters(List annotations, List parameters = new ArrayList<>(); ResolvedParameter extractParametersResult = new ResolvedParameter(); - if (parameter != null && StringUtils.isNotBlank(parameter.getIn())) { + if (parameter != null && (StringUtils.isNotBlank(parameter.getIn()) || StringUtils.isNotBlank(parameter.get$ref()))) { parameters.add(parameter); } else if (includeRequestBody) { Parameter unknownParameter = ParameterProcessor.applyAnnotations( diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index e86c017ea0..5eed0124f2 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -28,6 +28,7 @@ import io.swagger.v3.jaxrs2.resources.RefExamplesResource; import io.swagger.v3.jaxrs2.resources.RefHeaderResource; import io.swagger.v3.jaxrs2.resources.RefLinksResource; +import io.swagger.v3.jaxrs2.resources.RefParameter3029Resource; import io.swagger.v3.jaxrs2.resources.RefParameterResource; import io.swagger.v3.jaxrs2.resources.RefRequestBodyResource; import io.swagger.v3.jaxrs2.resources.RefResponsesResource; @@ -1914,4 +1915,59 @@ public void testTicket3015() { PrimitiveType.customExcludedClasses().remove(URI.class.getName()); } + + @Test(description = "Parameter with ref") + public void testTicket3029() { + Components components = new Components(); + components.addParameters("id", new Parameter() + .description("Id Description") + .schema(new IntegerSchema()) + .in(ParameterIn.QUERY.toString()) + .example(1) + .required(true)); + OpenAPI oas = new OpenAPI() + .info(new Info().description("info")) + .components(components); + + Reader reader = new Reader(oas); + OpenAPI openAPI = reader.read(RefParameter3029Resource.class); + + String yaml = "openapi: 3.0.1\n" + + "info:\n" + + " description: info\n" + + "paths:\n" + + " /2:\n" + + " get:\n" + + " summary: Simple get operation\n" + + " operationId: sendPayload2\n" + + " parameters:\n" + + " - $ref: '#/components/parameters/id'\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*': {}\n" + + " /1:\n" + + " get:\n" + + " summary: Simple get operation\n" + + " operationId: sendPayload1\n" + + " parameters:\n" + + " - $ref: '#/components/parameters/id'\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*': {}\n" + + "components:\n" + + " parameters:\n" + + " id:\n" + + " in: query\n" + + " description: Id Description\n" + + " required: true\n" + + " schema:\n" + + " type: integer\n" + + " format: int32\n" + + " example: 1\n"; + SerializationMatchers.assertEqualsToYaml(openAPI, yaml); + } } \ No newline at end of file diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/RefParameter3029Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/RefParameter3029Resource.java new file mode 100644 index 0000000000..9709ff763d --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/RefParameter3029Resource.java @@ -0,0 +1,32 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Schema; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.QueryParam; + +public class RefParameter3029Resource { + + @GET + @Path("/1") + @Operation( + summary = "Simple get operation", + operationId = "sendPayload1", + parameters = @Parameter(ref = "id")) + public void sendPayload1() { + } + + @GET + @Path("/2") + @Operation( + summary = "Simple get operation", + operationId = "sendPayload2") + @Parameter(ref = "id") + public void sendPayload2() { + } + +}