Open
Description
Bug Report Checklist
- Have you provided a full/minimal spec to reproduce the issue?
- Have you validated the input using an OpenAPI validator?
- Have you tested with the latest master to confirm the issue still exists?
- Have you searched for related issues/PRs?
- What's the actual output vs expected output?
- [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description
When response type File is found in Swagger Def, it generates correct ApiResponse but does not include correct handling of Response body content as non json byte stream to type File.
It will read all bytes into String not checking the header
https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/main/resources/Java/libraries/native/api.mustache#L300
String responseBody = new String(localVarResponse.body().readAllBytes());
localVarResponse.body().close();
return new ApiResponse<{{{returnType}}}>(
localVarResponse.statusCode(),
localVarResponse.headers().map(),
responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference<{{{returnType}}}>() {})
);
generates
String responseBody = new String(localVarResponse.body().readAllBytes());
localVarResponse.body().close();
return new ApiResponse<File>(
localVarResponse.statusCode(),
localVarResponse.headers().map(),
responseBody.isBlank()? null: memberVarObjectMapper.readValue(responseBody, new TypeReference<File>() {})
);
openapi-generator version
Master / 7.13.0
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>7.13.0</version>
OpenAPI declaration file content or url
"/rest/files/{id}/content": {
"get": {
"summary": "Download a file",
"description": "Download a file",
"tags": [
"files"
],
"parameters": [
{
"in": "path",
"name": "id",
"required": true,
"description": "The ID of the entity",
"type": "string"
}
],
"responses": {
"200": {
"description": "File download request is successful",
"schema": {
"type": "file"
}
},
"401": {
"description": "ERR_AUTH_UNAUTHORIZED\n"
},
"403": {
"description": "ERR_ACCESS_USER\n\nERR_ENTITY_DELETED\n\nERR_ENTITY_DLP_LOCKED\n\nERR_ENTITY_IS_SECURE_FOLDER\n\nERR_ENTITY_NOT_SCANNED\n\nERR_ENTITY_VIRUS_FOUND"
},
"490": {
"description": "Request blocked by WAF"
}
}
}
},
Generation Details
https://github.com/qld-gov-au/kiteworks-integration
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>7.13.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<!-- please ensure its updated when this plugin is updated -->
<!-- https://openapi-generator.tech/docs/templating/
cd .openapi-generator
curl -L https://api.github.com/repos/OpenAPITools/openapi-generator/tarball | tar xz
mv `ls`/modules/openapi-generator/src/main/resources/Java ./Java
rm -rf OpenAPITools-openapi-generator-*
cd Java; ls -d libraries/* | grep -v native | xargs rm -rf -->
<!-- what we changed: -->
<!-- * api.mustache -->
<!-- patch for null check objects on non required params -->
<templateDirectory>.openapi-generator/templates/Java</templateDirectory>
<inputSpec>${project.basedir}/src/main/resources/kiteworks.28.swagger.json</inputSpec>
<generatorName>java</generatorName>
<configOptions>
<dateLibrary>java8</dateLibrary> <!--java8 - Java 8 native JSR310 (preferred for jdk 1.8+) -->
<useJakartaEe>true</useJakartaEe>
<useTags>true</useTags>
<serializationLibrary>jackson</serializationLibrary>
</configOptions>
<library>native</library>
<!-- <output>${project.build.directory}/generated-sources/openapi</output>-->
<apiPackage>com.kiteworks.client.api</apiPackage>
<modelPackage>com.kiteworks.client.model</modelPackage>
<invokerPackage>com.kiteworks.client</invokerPackage>
<cleanupOutput>false</cleanupOutput>
<generateApiDocumentation>false</generateApiDocumentation>
<generateApiTests>false</generateApiTests>
<generateModelDocumentation>false</generateModelDocumentation>
<generateModelTests>false</generateModelTests>
<configHelp>false</configHelp>
</configuration>
</execution>
</executions>
</plugin>
Steps to reproduce
Call a server endpoint that returns File as response. It throws exception.
Related issues/PRs
Suggest a fix
What should it do;
It should check the response header for what type of payload it received as well as check returnType
for 'File' and handling accordingly.