Skip to content

Commit a139230

Browse files
authored
Skip examples on complex body in Java (#8887)
* Skip examples on complex body in Java This removes complex examples in Java which would not result in valid code. * Warn example being skip
1 parent fcab513 commit a139230

File tree

4 files changed

+67
-0
lines changed

4 files changed

+67
-0
lines changed

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

+46
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@
2323
import io.swagger.v3.oas.models.PathItem;
2424
import io.swagger.v3.oas.models.examples.Example;
2525
import io.swagger.v3.oas.models.media.ArraySchema;
26+
import io.swagger.v3.oas.models.media.Content;
2627
import io.swagger.v3.oas.models.media.ComposedSchema;
28+
import io.swagger.v3.oas.models.media.MediaType;
2729
import io.swagger.v3.oas.models.media.Schema;
2830
import io.swagger.v3.oas.models.media.StringSchema;
2931
import io.swagger.v3.oas.models.parameters.Parameter;
32+
import io.swagger.v3.oas.models.parameters.RequestBody;
3033
import io.swagger.v3.oas.models.servers.Server;
3134
import io.swagger.v3.parser.util.SchemaTypeUtil;
3235
import org.apache.commons.io.FilenameUtils;
@@ -984,6 +987,49 @@ public void setParameterExampleValue(CodegenParameter codegenParameter, Paramete
984987
setParameterExampleValue(codegenParameter);
985988
}
986989

990+
/**
991+
* Return the example value of the parameter. Overrides the parent method in DefaultCodegen
992+
* to not set examples on complex models, as they don't compile properly.
993+
*
994+
* @param codegenParameter Codegen parameter
995+
* @param requestBody Request body
996+
*/
997+
@Override
998+
public void setParameterExampleValue(CodegenParameter codegenParameter, RequestBody requestBody) {
999+
Boolean isModel = (codegenParameter.isModel || (codegenParameter.isContainer && codegenParameter.getItems().isModel));
1000+
1001+
Content content = requestBody.getContent();
1002+
1003+
if (content.size() > 1) {
1004+
// @see ModelUtils.getSchemaFromContent()
1005+
LOGGER.warn("Multiple MediaTypes found, using only the first one");
1006+
}
1007+
1008+
MediaType mediaType = content.values().iterator().next();
1009+
if (mediaType.getExample() != null) {
1010+
if (isModel) {
1011+
LOGGER.warn("Ignoring complex example on request body");
1012+
} else {
1013+
codegenParameter.example = mediaType.getExample().toString();
1014+
return;
1015+
}
1016+
}
1017+
1018+
if (mediaType.getExamples() != null && !mediaType.getExamples().isEmpty()) {
1019+
Example example = mediaType.getExamples().values().iterator().next();
1020+
if (example.getValue() != null) {
1021+
if (isModel) {
1022+
LOGGER.warn("Ignoring complex example on request body");
1023+
} else {
1024+
codegenParameter.example = example.getValue().toString();
1025+
return;
1026+
}
1027+
}
1028+
}
1029+
1030+
setParameterExampleValue(codegenParameter);
1031+
}
1032+
9871033
@Override
9881034
public void setParameterExampleValue(CodegenParameter p) {
9891035
String example;

modules/openapi-generator/src/test/resources/3_0/java/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -1146,6 +1146,13 @@ components:
11461146
type: array
11471147
items:
11481148
$ref: '#/components/schemas/User'
1149+
examples:
1150+
simple-list:
1151+
summary: Simple list example
1152+
description: Should not get into code examples
1153+
value:
1154+
- username: foo
1155+
- username: bar
11491156
description: List of user object
11501157
required: true
11511158
Client:

samples/openapi3/client/petstore/java/jersey2-java8/api/openapi.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -1257,6 +1257,13 @@ components:
12571257
UserArray:
12581258
content:
12591259
application/json:
1260+
examples:
1261+
simple-list:
1262+
description: Should not get into code examples
1263+
summary: Simple list example
1264+
value:
1265+
- username: foo
1266+
- username: bar
12601267
schema:
12611268
items:
12621269
$ref: '#/components/schemas/User'

samples/openapi3/client/petstore/java/native/api/openapi.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -1257,6 +1257,13 @@ components:
12571257
UserArray:
12581258
content:
12591259
application/json:
1260+
examples:
1261+
simple-list:
1262+
description: Should not get into code examples
1263+
summary: Simple list example
1264+
value:
1265+
- username: foo
1266+
- username: bar
12601267
schema:
12611268
items:
12621269
$ref: '#/components/schemas/User'

0 commit comments

Comments
 (0)