Skip to content

Commit a6c40cc

Browse files
jminiwing328
authored andcommitted
[core] Fix NullPointer when schema is not set in header (OpenAPITools#2133)
1 parent 3957341 commit a6c40cc

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3297,12 +3297,19 @@ protected List<Map<String, Object>> toExamples(Map<String, Object> examples) {
32973297
*/
32983298
private void addHeaders(ApiResponse response, List<CodegenProperty> properties) {
32993299
if (response.getHeaders() != null) {
3300-
for (Map.Entry<String, Header> headers : response.getHeaders().entrySet()) {
3301-
String description = headers.getValue().getDescription();
3300+
for (Map.Entry<String, Header> headerEntry : response.getHeaders().entrySet()) {
3301+
String description = headerEntry.getValue().getDescription();
33023302
// follow the $ref
3303-
Header header = ModelUtils.getReferencedHeader(this.openAPI, headers.getValue());
3303+
Header header = ModelUtils.getReferencedHeader(this.openAPI, headerEntry.getValue());
33043304

3305-
CodegenProperty cp = fromProperty(headers.getKey(), header.getSchema());
3305+
Schema schema;
3306+
if(header.getSchema() == null) {
3307+
LOGGER.warn("No schema defined for Header '" + headerEntry.getKey() +"', using a String schema");
3308+
schema = new StringSchema();
3309+
} else {
3310+
schema = header.getSchema();
3311+
}
3312+
CodegenProperty cp = fromProperty(headerEntry.getKey(), schema);
33063313
cp.setDescription(escapeText(description));
33073314
cp.setUnescapedDescription(description);
33083315
properties.add(cp);

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.swagger.v3.oas.models.Operation;
2323
import io.swagger.v3.oas.models.PathItem;
2424
import io.swagger.v3.oas.models.media.*;
25+
import io.swagger.v3.oas.models.headers.Header;
2526
import io.swagger.v3.oas.models.parameters.QueryParameter;
2627
import io.swagger.v3.oas.models.parameters.RequestBody;
2728
import io.swagger.v3.oas.models.responses.ApiResponse;
@@ -532,6 +533,24 @@ public void testLeadingSlashIsAddedIfMissing() {
532533
Assert.assertEquals(co2.path, "/some/path");
533534
}
534535

536+
@Test
537+
public void testResponseWithNoSchemaInHeaders() {
538+
OpenAPI openAPI = TestUtils.createOpenAPI();
539+
ApiResponse response2XX = new ApiResponse()
540+
.description("OK")
541+
.addHeaderObject("x-custom-header", new Header()
542+
.description("a custom header")
543+
.style(Header.StyleEnum.SIMPLE));
544+
Operation operation1 = new Operation().operationId("op1").responses(new ApiResponses().addApiResponse("2XX", response2XX));
545+
openAPI.path("/here", new PathItem().get(operation1));
546+
final DefaultCodegen codegen = new DefaultCodegen();
547+
codegen.setOpenAPI(openAPI);
548+
549+
CodegenResponse cr = codegen.fromResponse("2XX", response2XX);
550+
Assert.assertNotNull(cr);
551+
Assert.assertTrue(cr.hasHeaders);
552+
}
553+
535554
private void verifyPersonDiscriminator(CodegenDiscriminator discriminator) {
536555
CodegenDiscriminator test = new CodegenDiscriminator();
537556
test.setPropertyName("DollarUnderscoretype");

0 commit comments

Comments
 (0)