Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -287,8 +287,9 @@ public OpenAPI read(Class<?> cls,
Hidden hidden = cls.getAnnotation(Hidden.class);
// class path
final javax.ws.rs.Path apiPath = ReflectionUtils.getAnnotation(cls, javax.ws.rs.Path.class);
final boolean openapi31 = Boolean.TRUE.equals(config.isOpenAPI31());

if (Boolean.TRUE.equals(config.isOpenAPI31())) {
if (openapi31) {
openAPI.setOpenapi("3.1.0");
}

Expand Down Expand Up @@ -342,7 +343,7 @@ public OpenAPI read(Class<?> cls,
// OpenApiDefinition extensions
if (openAPIDefinition.extensions().length > 0) {
openAPI.setExtensions(AnnotationsUtils
.getExtensions(config.isOpenAPI31(), openAPIDefinition.extensions()));
.getExtensions(openapi31, openAPIDefinition.extensions()));
}

}
Expand Down Expand Up @@ -407,7 +408,7 @@ public OpenAPI read(Class<?> cls,

JavaType classType = TypeFactory.defaultInstance().constructType(cls);
BeanDescription bd;
if (Boolean.TRUE.equals(config.isOpenAPI31())) {
if (openapi31) {
bd = Json31.mapper().getSerializationConfig().introspect(classType);
} else {
bd = Json.mapper().getSerializationConfig().introspect(classType);
Expand All @@ -416,7 +417,7 @@ public OpenAPI read(Class<?> cls,
final List<Parameter> globalParameters = new ArrayList<>();

// look for constructor-level annotated properties
globalParameters.addAll(ReaderUtils.collectConstructorParameters(cls, components, classConsumes, null, config.getSchemaResolution()));
globalParameters.addAll(ReaderUtils.collectConstructorParameters(cls, components, classConsumes, null, config.getSchemaResolution(), openapi31));

// look for field-level annotated properties
globalParameters.addAll(ReaderUtils.collectFieldParameters(cls, components, classConsumes, null));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,14 @@ public class ReaderUtils {
private static final String OPTIONS_METHOD = "options";
private static final String PATH_DELIMITER = "/";

public static List<Parameter> collectConstructorParameters(Class<?> cls, Components components, javax.ws.rs.Consumes classConsumes, JsonView jsonViewAnnotation) {
return collectConstructorParameters(cls, components, classConsumes, jsonViewAnnotation, null);
}
/**
* Collects constructor-level parameters from class.
*
* @param cls is a class for collecting
* @param components
* @return the collection of supported parameters
*/
public static List<Parameter> collectConstructorParameters(Class<?> cls, Components components, javax.ws.rs.Consumes classConsumes, JsonView jsonViewAnnotation, Schema.SchemaResolution schemaResolution) {
public static List<Parameter> collectConstructorParameters(Class<?> cls, Components components, javax.ws.rs.Consumes classConsumes, JsonView jsonViewAnnotation, Schema.SchemaResolution schemaResolution, boolean openapi31) {
if (cls.isLocalClass() || (cls.isMemberClass() && !Modifier.isStatic(cls.getModifiers()))) {
return Collections.emptyList();
}
Expand Down Expand Up @@ -81,7 +78,9 @@ public static List<Parameter> collectConstructorParameters(Class<?> cls, Compone
components,
classConsumes == null ? new String[0] : classConsumes.value(),
null,
jsonViewAnnotation, false, schemaResolution);
jsonViewAnnotation,
openapi31,
schemaResolution);
if (processedParameter != null) {
parameters.add(processedParameter);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
import io.swagger.v3.jaxrs2.resources.Ticket4804ProcessorResource;
import io.swagger.v3.jaxrs2.resources.Ticket4804Resource;
import io.swagger.v3.jaxrs2.resources.Ticket4859Resource;
import io.swagger.v3.jaxrs2.resources.Ticket4878Resource;
import io.swagger.v3.jaxrs2.resources.Ticket4879Resource;
import io.swagger.v3.jaxrs2.resources.UploadResource;
import io.swagger.v3.jaxrs2.resources.UrlEncodedResourceWithEncodings;
Expand Down Expand Up @@ -5342,4 +5343,38 @@ public void testTicket4065() {
SerializationMatchers.assertEqualsToYaml31(openAPI, yaml);
ModelConverters.reset();
}

@Test(description = "Test model resolution for global path parameters with openAPI 3.1")
public void testTicket4878() {
ModelConverters.reset();
SwaggerConfiguration config = new SwaggerConfiguration().openAPI31(true);
Reader reader = new Reader(config);

OpenAPI openAPI = reader.read(Ticket4878Resource.class);
String yaml = "openapi: 3.1.0\n" +
"paths:\n" +
" /{globalPathParam}/{localPathParam}:\n" +
" get:\n" +
" operationId: getMethod\n" +
" parameters:\n" +
" - name: globalPathParam\n" +
" in: path\n" +
" required: true\n" +
" schema:\n" +
" type: string\n" +
" $comment: 3.1 property for global path param\n" +
" - name: localPathParam\n" +
" in: path\n" +
" required: true\n" +
" schema:\n" +
" type: string\n" +
" $comment: 3.1 property for local path param\n" +
" responses:\n" +
" default:\n" +
" description: default response\n" +
" content:\n" +
" '*/*': {}\n";
SerializationMatchers.assertEqualsToYaml31(openAPI, yaml);
ModelConverters.reset();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.swagger.v3.jaxrs2.resources;

import io.swagger.v3.oas.annotations.media.Schema;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

@Path("{globalPathParam}")
public class Ticket4878Resource {

public Ticket4878Resource(@PathParam("globalPathParam") @Schema($comment="3.1 property for global path param") String globalPathParam) {}

@GET
@Path("{localPathParam}")
public void getMethod(@PathParam("localPathParam") @Schema($comment="3.1 property for local path param") String localPathParam) {}
}
Loading