Skip to content

Commit d3cb3f2

Browse files
Fix fix that child constructor was invalid when having readonly field in parent
1 parent 4f00a34 commit d3cb3f2

3 files changed

Lines changed: 69 additions & 2 deletions

File tree

modules/openapi-generator/src/main/resources/Java/libraries/microprofile/pojo.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ public class {{classname}} {{#parent}}extends {{{.}}}{{/parent}}{{#vendorExtensi
5252
{{{.}}}
5353
{{/vendorExtensions.x-field-extra-annotation}}
5454
{{#isContainer}}
55-
private {{{datatypeWithEnum}}} {{name}}{{#required}} = {{{defaultValue}}}{{/required}}{{^required}} = null{{/required}};
55+
protected {{{datatypeWithEnum}}} {{name}}{{#required}} = {{{defaultValue}}}{{/required}}{{^required}} = null{{/required}};
5656
{{/isContainer}}
5757
{{^isContainer}}
58-
private {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}};
58+
protected {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}};
5959
{{/isContainer}}
6060
{{/vars}}
6161
{{>additional_properties}}

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/microprofile/JavaMicroprofileServerCodegenTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,5 +235,31 @@ public void testGeneratedApiExceptionMapperDoesNotHaveProviderAnnotationWhenDisa
235235
.assertTypeAnnotations()
236236
.doesNotContainWithName("Provider");
237237
}
238+
239+
@Test
240+
public void testClientCanAccessFieldInParent() throws Exception {
241+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
242+
output.deleteOnExit();
243+
244+
OpenAPI openAPI = new OpenAPIParser()
245+
.readLocation("src/test/resources/bugs/issue_23034.yaml", null, new ParseOptions()).getOpenAPI();
246+
247+
codegen.setOutputDir(output.getAbsolutePath());
248+
codegen.additionalProperties().put(JavaClientCodegen.MICROPROFILE_GLOBAL_EXCEPTION_MAPPER, "false");
249+
250+
ClientOptInput input = new ClientOptInput()
251+
.openAPI(openAPI)
252+
.config(codegen);
253+
254+
List<File> files = new DefaultGenerator().opts(input).generate();
255+
256+
Map<String, File> filesMap = files.stream()
257+
.collect(Collectors.toMap(File::getName, Function.identity()));
258+
259+
validateJavaSourceFiles(files);
260+
261+
JavaFileAssert.assertThat(filesMap.get("Parent.java"))
262+
.fileContains("protected parentField");
263+
}
238264
}
239265

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
openapi: 3.0.4
3+
info:
4+
title: Reproduce
5+
version: 'v1'
6+
components:
7+
schemas:
8+
Child:
9+
required:
10+
- childField1
11+
type: object
12+
allOf:
13+
- $ref: "#/components/schemas/Parent"
14+
properties:
15+
childField1:
16+
type: string
17+
18+
Parent:
19+
required:
20+
- parentField
21+
type: object
22+
properties:
23+
parentField:
24+
type: string
25+
readOnly: true
26+
discriminator:
27+
propertyName: classType
28+
mapping:
29+
Child: "#/components/schemas/Child"
30+
paths:
31+
'/v1/reproduce':
32+
get:
33+
responses:
34+
'200':
35+
content:
36+
application/json:
37+
schema:
38+
type: array
39+
items:
40+
$ref: '#/components/schemas/Child'
41+
description: 'reproduce'

0 commit comments

Comments
 (0)