Created by: burberius
PR checklist
-
Read the contribution guidelines. -
Ran the shell script under ./bin/
to update Petstore sample so that CIs can verify the change. (For instance, only need to run./bin/{LANG}-petstore.sh
,./bin/openapi3/{LANG}-petstore.sh
,./bin/security/{LANG}-petstore.sh
and./bin/openapi3/security/{LANG}-petstore.sh
if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in.\bin\windows\
. -
Filed the PR against the correct branch: master
,. Default:3.4.x
,4.0.x
master
. -
Copied the technical committee to review the pull request if your PR is targeting a particular programming language.
Description of the PR
Port of @ngaya-ll 's pull request from swagger to openapi. See https://github.com/swagger-api/swagger-codegen/pull/8053
Currently, the generated Java okhttp-gson client adds an interceptor to the underlying OkHttpClient for each async call. The purpose of the interceptor is to wrap the response body to track download progress. This implementation doesn't work correctly, for multiple reasons:
The interceptor intercepts all requests to the client, not just the one it's trying to track. Interceptors are never removed from the client, so each async request adds another layer of interception for all subsequent requests. Since the interceptor chain is invoked recursively, at some point all requests will start failing with a StackOverflowError. With this code change, the client uses a single interceptor to decorate all async requests and send updates to the relevant listener only.
I also added a test case to demonstrate the issue, which fails on the current master and passes on this branch.
On master the petshop generation is broken, so I couldn't produce the samples and run the tests!
Reviewers: @bbdouglas @sreeshas @jfiala @lukoyanov @cbornet @jeff9finger
Thanks @ngaya-ll for the original work.