Skip to content

Commit 64e27b7

Browse files
authored
Merge pull request #11829 from swagger-api/oss-planning-612
added composed schema extension for composed models founds
2 parents 305249e + 286d549 commit 64e27b7

File tree

358 files changed

+2363
-1315
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

358 files changed

+2363
-1315
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/v3/DefaultGenerator.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,8 +394,14 @@ public int compare(String o1, String o2) {
394394

395395
if (composedModels != null && !composedModels.isEmpty()) {
396396
for (CodegenModel composedModel : composedModels) {
397+
if (allProcessedModels.get(composedModel.name) != null) {
398+
final Map<String, Object> models = (Map<String, Object>) allProcessedModels.get(composedModel.name);
399+
models.put("x-is-composed-model", composedModel.isComposedModel);
400+
continue;
401+
}
397402
final Map<String, Object> models = processModel(composedModel, config, schemas);
398403
models.put("classname", config.toModelName(composedModel.name));
404+
models.put("x-is-composed-model", composedModel.isComposedModel);
399405
models.putAll(config.additionalProperties());
400406
allProcessedModels.put(composedModel.name, models);
401407
}
@@ -1061,8 +1067,6 @@ private Map<String, Object> processModel(CodegenModel codegenModel, CodegenConfi
10611067
objs.put("package", config.modelPackage());
10621068
List<Object> models = new ArrayList<>();
10631069

1064-
objs.put("x-is-composed-model", codegenModel.isComposedModel);
1065-
10661070
Map<String, Object> modelObject = new HashMap<>();
10671071
modelObject.put("model", codegenModel);
10681072
modelObject.put("importPath", config.toModelImport(codegenModel.classname));

modules/swagger-codegen/src/test/java/io/swagger/codegen/v3/service/GeneratorServiceTest.java

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,196 @@ public void testGeneratorServiceTypescriptAngular3() {
832832
Assert.assertFalse(files.isEmpty());
833833
}
834834

835+
/*
836+
* testIssue605 testIssue612_CC27814 testIssue613_CC27916 testIssue613_CC27916
837+
*
838+
* to obtain a runnable server via jetty:run, in generated server code, replace the following files
839+
* with the ones in src/test/resources/3_0_0/issue-605/sertemplate
840+
*
841+
* pom.xml
842+
* web.xml
843+
* RestApplication.java
844+
* InventoryApi.java
845+
*
846+
*
847+
*/
848+
@Test
849+
public void testIssue605() throws IOException {
850+
String path = getTmpFolder().getAbsolutePath() + "/client";
851+
GenerationRequest request = new GenerationRequest();
852+
request
853+
.codegenVersion(GenerationRequest.CodegenVersion.V3)
854+
.type(GenerationRequest.Type.CLIENT)
855+
.lang("java")
856+
.spec(loadSpecAsNode("3_0_0/issue-605/swagger.yaml", true, false))
857+
.options(
858+
new Options()
859+
.outputDir(path)
860+
.library("resteasy")
861+
.addAdditionalProperty("dateLibray", "time4j")
862+
863+
);
864+
List<File> files = new GeneratorService().generationRequest(request).generate();
865+
Assert.assertFalse(files.isEmpty());
866+
System.out.println("Generated client in:\n" + path);
867+
path = getTmpFolder().getAbsolutePath() + "/server";
868+
request = new GenerationRequest();
869+
request
870+
.codegenVersion(GenerationRequest.CodegenVersion.V3)
871+
.type(GenerationRequest.Type.SERVER)
872+
.lang("jaxrs-resteasy")
873+
.spec(loadSpecAsNode("3_0_0/issue-605/swagger.yaml", true, false))
874+
.options(
875+
new Options()
876+
.outputDir(path)
877+
878+
);
879+
files = new GeneratorService().generationRequest(request).generate();
880+
Assert.assertFalse(files.isEmpty());
881+
System.out.println("Generated server in:\n" + path);
882+
}
883+
884+
@Test
885+
public void testIssue612_CC27814() throws IOException {
886+
887+
String path = getTmpFolder().getAbsolutePath() + "/server";
888+
GenerationRequest request = new GenerationRequest();
889+
request
890+
.codegenVersion(GenerationRequest.CodegenVersion.V3)
891+
.type(GenerationRequest.Type.SERVER)
892+
.lang("jaxrs-resteasy")
893+
.spec(loadSpecAsNode("3_0_0/issue-612/cc-27814.yaml", true, false))
894+
.options(
895+
new Options()
896+
.outputDir(path)
897+
);
898+
List<File> files = new GeneratorService().generationRequest(request).generate();
899+
Assert.assertFalse(files.isEmpty());
900+
System.out.println("Generated server in:\n" + path);
901+
902+
path = getTmpFolder().getAbsolutePath() + "/client";
903+
request = new GenerationRequest();
904+
request
905+
.codegenVersion(GenerationRequest.CodegenVersion.V3)
906+
.type(GenerationRequest.Type.CLIENT)
907+
.lang("java")
908+
.spec(loadSpecAsNode("3_0_0/issue-612/cc-27814.yaml", true, false))
909+
.options(
910+
new Options()
911+
.outputDir(path)
912+
.library("resteasy")
913+
.addAdditionalProperty("dateLibray", "time4j")
914+
915+
);
916+
files = new GeneratorService().generationRequest(request).generate();
917+
Assert.assertFalse(files.isEmpty());
918+
System.out.println("Generated client in:\n" + path);
919+
}
920+
921+
@Test
922+
public void testIssue613_CC27916() throws IOException {
923+
924+
String path = getTmpFolder().getAbsolutePath() + "/client";
925+
GenerationRequest request = new GenerationRequest();
926+
request
927+
.codegenVersion(GenerationRequest.CodegenVersion.V3)
928+
.type(GenerationRequest.Type.CLIENT)
929+
.lang("java")
930+
.spec(loadSpecAsNode("3_0_0/issue-613/cc-27916.yaml", true, false))
931+
.options(
932+
new Options()
933+
.outputDir(path)
934+
);
935+
List<File> files = new GeneratorService().generationRequest(request).generate();
936+
Assert.assertFalse(files.isEmpty());
937+
System.out.println("Generated client in:\n" + path);
938+
939+
path = getTmpFolder().getAbsolutePath() + "/server";
940+
request = new GenerationRequest();
941+
request
942+
.codegenVersion(GenerationRequest.CodegenVersion.V3)
943+
.type(GenerationRequest.Type.SERVER)
944+
.lang("jaxrs-resteasy")
945+
.spec(loadSpecAsNode("3_0_0/issue-613/cc-27916.yaml", true, false))
946+
.options(
947+
new Options()
948+
.outputDir(path)
949+
950+
);
951+
files = new GeneratorService().generationRequest(request).generate();
952+
Assert.assertFalse(files.isEmpty());
953+
System.out.println("Generated server in:\n" + path);
954+
}
955+
956+
@Test
957+
public void testIssue613_605_612() throws IOException {
958+
959+
String path = getTmpFolder().getAbsolutePath() + "/client";
960+
GenerationRequest request = new GenerationRequest();
961+
request
962+
.codegenVersion(GenerationRequest.CodegenVersion.V3)
963+
.type(GenerationRequest.Type.CLIENT)
964+
.lang("java")
965+
.spec(loadSpecAsNode("3_0_0/issue-605-612-613/swagger.yaml", true, false))
966+
.options(
967+
new Options()
968+
.outputDir(path)
969+
);
970+
List<File> files = new GeneratorService().generationRequest(request).generate();
971+
Assert.assertFalse(files.isEmpty());
972+
System.out.println("Generated client in:\n" + path);
973+
974+
path = getTmpFolder().getAbsolutePath() + "/server";
975+
request = new GenerationRequest();
976+
request
977+
.codegenVersion(GenerationRequest.CodegenVersion.V3)
978+
.type(GenerationRequest.Type.SERVER)
979+
.lang("jaxrs-resteasy")
980+
.spec(loadSpecAsNode("3_0_0/issue-605-612-613/swagger.yaml", true, false))
981+
.options(
982+
new Options()
983+
.outputDir(path)
984+
985+
);
986+
files = new GeneratorService().generationRequest(request).generate();
987+
Assert.assertFalse(files.isEmpty());
988+
System.out.println("Generated server in:\n" + path);
989+
}
990+
991+
@Test
992+
public void testIssue613_605_612_non_resteasy() throws IOException {
993+
994+
String path = getTmpFolder().getAbsolutePath() + "/clientdefault";
995+
GenerationRequest request = new GenerationRequest();
996+
request
997+
.codegenVersion(GenerationRequest.CodegenVersion.V3)
998+
.type(GenerationRequest.Type.CLIENT)
999+
.lang("java")
1000+
.spec(loadSpecAsNode("3_0_0/issue-605-612-613/swagger.yaml", true, false))
1001+
.options(
1002+
new Options()
1003+
.outputDir(path)
1004+
);
1005+
List<File> files = new GeneratorService().generationRequest(request).generate();
1006+
Assert.assertFalse(files.isEmpty());
1007+
System.out.println("Generated client in:\n" + path);
1008+
1009+
path = getTmpFolder().getAbsolutePath() + "/server";
1010+
request = new GenerationRequest();
1011+
request
1012+
.codegenVersion(GenerationRequest.CodegenVersion.V3)
1013+
.type(GenerationRequest.Type.SERVER)
1014+
.lang("jaxrs-jersey")
1015+
.spec(loadSpecAsNode("3_0_0/issue-605-612-613/swagger.yaml", true, false))
1016+
.options(
1017+
new Options()
1018+
.outputDir(path)
1019+
1020+
);
1021+
files = new GeneratorService().generationRequest(request).generate();
1022+
Assert.assertFalse(files.isEmpty());
1023+
System.out.println("Generated server in:\n" + path);
1024+
}
8351025
protected static File getTmpFolder() {
8361026
try {
8371027
File outputFolder = Files.createTempFile("codegentest-", "-tmp").toFile();
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
openapi: 3.0.1
2+
info:
3+
title: OpenAPI definition
4+
version: v0
5+
servers:
6+
- url: http://localhost:8080
7+
description: Generated server url
8+
paths:
9+
/list:
10+
get:
11+
tags:
12+
- demo-controller
13+
operationId: epList
14+
responses:
15+
'200':
16+
description: OK
17+
content:
18+
'*/*':
19+
schema:
20+
type: array
21+
items:
22+
oneOf:
23+
- $ref: '#/components/schemas/ClassA'
24+
- $ref: '#/components/schemas/ClassB'
25+
/c:
26+
get:
27+
tags:
28+
- demo-controller
29+
operationId: epC
30+
responses:
31+
'200':
32+
description: OK
33+
content:
34+
'*/*':
35+
schema:
36+
oneOf:
37+
- $ref: '#/components/schemas/ClassA'
38+
- $ref: '#/components/schemas/ClassB'
39+
/d:
40+
get:
41+
tags:
42+
- demo-controller
43+
operationId: epD
44+
requestBody:
45+
description: Inventory item to add
46+
content:
47+
application/json:
48+
schema:
49+
$ref: '#/components/schemas/ClassAorB'
50+
responses:
51+
'200':
52+
description: OK
53+
content:
54+
'*/*':
55+
schema:
56+
oneOf:
57+
- $ref: '#/components/schemas/ClassA'
58+
- $ref: '#/components/schemas/ClassB'
59+
'202':
60+
description: OK
61+
content:
62+
'*/*':
63+
schema:
64+
$ref: '#/components/schemas/ClassAorB'
65+
/b:
66+
get:
67+
tags:
68+
- demo-controller
69+
operationId: epB
70+
responses:
71+
'200':
72+
description: OK
73+
content:
74+
'*/*':
75+
schema:
76+
$ref: '#/components/schemas/ClassB'
77+
/a:
78+
get:
79+
tags:
80+
- demo-controller
81+
operationId: epA
82+
responses:
83+
'200':
84+
description: OK
85+
content:
86+
'*/*':
87+
schema:
88+
$ref: '#/components/schemas/ClassA'
89+
components:
90+
schemas:
91+
ClassA:
92+
required:
93+
- bId
94+
- type
95+
type: object
96+
allOf:
97+
- $ref: '#/components/schemas/InterfaceC'
98+
- type: object
99+
properties:
100+
onlyInA:
101+
type: string
102+
ClassB:
103+
required:
104+
- bId
105+
- type
106+
type: object
107+
allOf:
108+
- $ref: '#/components/schemas/InterfaceC'
109+
InterfaceC:
110+
type: object
111+
properties:
112+
currentTime:
113+
type: string
114+
type:
115+
type: string
116+
discriminator:
117+
propertyName: type
118+
ClassAorB:
119+
discriminator:
120+
propertyName: type
121+
oneOf:
122+
- $ref: '#/components/schemas/ClassA'
123+
- $ref: '#/components/schemas/ClassB'

0 commit comments

Comments
 (0)