Skip to content

Commit 4534e8d

Browse files
authored
Resolve vendor extensions on schemas referenced in parameters. (#22690)
fixes #9138
1 parent a40dc56 commit 4534e8d

3 files changed

Lines changed: 84 additions & 3 deletions

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5349,9 +5349,6 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
53495349
if (parameter.getExtensions() != null && !parameter.getExtensions().isEmpty()) {
53505350
codegenParameter.vendorExtensions.putAll(parameter.getExtensions());
53515351
}
5352-
if (parameter.getSchema() != null && parameter.getSchema().getExtensions() != null && !parameter.getSchema().getExtensions().isEmpty()) {
5353-
codegenParameter.vendorExtensions.putAll(parameter.getSchema().getExtensions());
5354-
}
53555352

53565353
Schema parameterSchema;
53575354

@@ -5386,6 +5383,10 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
53865383
parameterSchema = null;
53875384
}
53885385

5386+
if (parameterSchema != null && parameterSchema.getExtensions() != null && !parameterSchema.getExtensions().isEmpty()) {
5387+
codegenParameter.vendorExtensions.putAll(parameterSchema.getExtensions());
5388+
}
5389+
53895390
if (parameter instanceof QueryParameter || "query".equalsIgnoreCase(parameter.getIn())) {
53905391
codegenParameter.isQueryParam = true;
53915392
codegenParameter.isAllowEmptyValue = parameter.getAllowEmptyValue() != null && parameter.getAllowEmptyValue();

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6175,4 +6175,52 @@ public void annotationLibraryDoesNotCauseImportConflictsInSpringWithAnnotationLi
61756175
"import io.swagger.v3.oas.annotations.media.Schema;"
61766176
);
61776177
}
6178+
6179+
@Test
6180+
public void testExtensionsOnSchema_issue9183() throws IOException {
6181+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
6182+
output.deleteOnExit();
6183+
6184+
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_9138_resolve_extensions_on_schema.yaml");
6185+
final SpringCodegen codegen = new SpringCodegen();
6186+
codegen.setOpenAPI(openAPI);
6187+
codegen.setOutputDir(output.getAbsolutePath());
6188+
6189+
codegen.additionalProperties().put(SpringCodegen.DATE_LIBRARY, "java8-localdatetime");
6190+
codegen.additionalProperties().put(INTERFACE_ONLY, "true");
6191+
codegen.additionalProperties().put(USE_RESPONSE_ENTITY, "false");
6192+
codegen.additionalProperties().put(DELEGATE_PATTERN, "true");
6193+
codegen.additionalProperties().put(USE_BEANVALIDATION, "true");
6194+
codegen.additionalProperties().put(PERFORM_BEANVALIDATION, "true");
6195+
codegen.additionalProperties().put(REQUEST_MAPPING_OPTION, "api_interface");
6196+
6197+
ClientOptInput input = new ClientOptInput();
6198+
input.openAPI(openAPI);
6199+
input.config(codegen);
6200+
6201+
DefaultGenerator generator = new DefaultGenerator();
6202+
generator.setGenerateMetadata(false); // skip metadata generation
6203+
6204+
Map<String, File> files = generator.opts(input).generate().stream()
6205+
.collect(Collectors.toMap(File::getName, Function.identity()));
6206+
6207+
JavaFileAssert javaFileAssert = JavaFileAssert.assertThat(files.get("TestApi.java"));
6208+
javaFileAssert
6209+
.assertMethod("_postToTest")
6210+
.assertParameter("groupObj")
6211+
.assertParameterAnnotations()
6212+
.containsWithNameAndAttributes("Pattern", ImmutableMap.of(
6213+
"regexp", "\"[a-zA-Z]\"",
6214+
"message", "\"Only letters\""
6215+
))
6216+
.toParameter()
6217+
.toMethod()
6218+
.assertParameter("token")
6219+
.assertParameterAnnotations()
6220+
.containsWithNameAndAttributes("Pattern", ImmutableMap.of(
6221+
"regexp", "\"[0-9a-fA-F]\"",
6222+
"message", "\"Only numbers and letters a-f\""
6223+
));
6224+
}
6225+
61786226
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
openapi: 3.0.3
2+
info:
3+
title: sample spec
4+
version: 1.0.0
5+
paths:
6+
/test/{groupObj}:
7+
post:
8+
summary: Post to test
9+
description: ''
10+
operationId: postToTest
11+
parameters:
12+
- in: path
13+
name: groupObj
14+
required: true
15+
schema:
16+
$ref: '#/components/schemas/OnlyLetters'
17+
- in: query
18+
name: token
19+
required: true
20+
schema:
21+
type: string
22+
pattern: "[0-9a-fA-F]"
23+
x-pattern-message: "Only numbers and letters a-f"
24+
responses:
25+
201:
26+
description: success
27+
components:
28+
schemas:
29+
OnlyLetters:
30+
type: string
31+
pattern: "[a-zA-Z]"
32+
x-pattern-message: "Only letters"

0 commit comments

Comments
 (0)