[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors - #2356

Merged
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix
Mar 12, 2019
Merged

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors#2356
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix

Conversation

@burberius

@burberiusburberius commented Mar 10, 2019

Copy link
Copy Markdown
Contributor

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, 3.4.x, 4.0.x. Default: 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 swagger-api/swagger-codegen#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.

GoldenGnu added a commit to GoldenGnu/eve-esi that referenced this pull request Mar 11, 2019
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
burberius pushed a commit to burberius/eve-esi that referenced this pull request Mar 11, 2019
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
@wing328wing328 added this to the 4.0.0 milestone Mar 12, 2019
@wing328

Copy link
Copy Markdown
Member

@burberius thanks for the PR. I notice that the additional tests added by @burberius are not yet included in this PR. I'll submit another PR to add the tests instead.

I tested locally with the new test cases and all tests passed.

Also thanks @ngaya-ll for the original work.

@wing328
wing328 merged commit fde3252 into OpenAPITools:masterMar 12, 2019
@wing328wing328 changed the title Port of @ngaya-ll 's pull request from swagger to openapi.[Java][okhttp-gson] Fix incorrect use of OkHttp interceptorsMar 12, 2019
burberius added a commit to burberius/eve-esi that referenced this pull request Mar 17, 2019
* Line ending changes
Always use lf line ending for *.sed and *.sh files. Use default for everything else.
* More line ending stuff
* Final line ending change
* Started on issue 78
* Better tests
less failing
* Better tests
less failing (again)
* More work on issue 78
* Issue 78
Better error handling
* Issue 78 formatting
* Less sync blocks
* First commit switching to okhttp
Status
-Compiles and no test failures
Known Issues:
-soApi.revokeRefreshToken() and SsoApi.revokeAccessToken() does nothing.
-SsoApi.getCharacterInfo() is just a wrapper for MetaApi.getVerify()
* More work on okhttp
Known issues:
VerifyResponse.getExpiresOn() return a String should be Java8 Date format?
* swagger codegen 2.3.1
* formatting
* Bug Fix for OAuth
Bug: Code allow you to match a refresh token with just a clientID
* Ok http (#83)
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
* Added fixed openapi-generator.
* Added new openapi generator and made script executable.
* Update ApiClient.java
Use the latest version of Burberius openapi-generator-cli
* 2019-03-11 esi release
2019-03-11 esi release
Promoted
/v3/universe/names/ (now resolve faction ids)
* ApiClientBuilder (#85)
* ApiClientBuilder
* little more work on the builder
* Okhttp fixes (#89)
* Fixed SsoAuth main
* Updated CharacterInfo and SsoApi
-Updated CharacterInfo with better method names + tests
-SsoApi commen
* Update README.md (#88)
* ApiClientBuilder
* little more work on the builder
* Update README.md
-Removed client secret (no longer used)
-Updated link to MarketApiTest, ESI, and SSO
* Formated pom.xml
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@burberius@wing328@ackintosh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors - #2356

Merged
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix
Mar 12, 2019
Merged

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors#2356
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix

Conversation

@burberius

@burberiusburberius commented Mar 10, 2019

Copy link
Copy Markdown
Contributor

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, 3.4.x, 4.0.x. Default: 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 swagger-api/swagger-codegen#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.

GoldenGnu added a commit to GoldenGnu/eve-esi that referenced this pull request Mar 11, 2019
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
burberius pushed a commit to burberius/eve-esi that referenced this pull request Mar 11, 2019
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
@wing328wing328 added this to the 4.0.0 milestone Mar 12, 2019
@wing328

Copy link
Copy Markdown
Member

@burberius thanks for the PR. I notice that the additional tests added by @burberius are not yet included in this PR. I'll submit another PR to add the tests instead.

I tested locally with the new test cases and all tests passed.

Also thanks @ngaya-ll for the original work.

@wing328
wing328 merged commit fde3252 into OpenAPITools:masterMar 12, 2019
@wing328wing328 changed the title Port of @ngaya-ll 's pull request from swagger to openapi.[Java][okhttp-gson] Fix incorrect use of OkHttp interceptorsMar 12, 2019
burberius added a commit to burberius/eve-esi that referenced this pull request Mar 17, 2019
* Line ending changes
Always use lf line ending for *.sed and *.sh files. Use default for everything else.
* More line ending stuff
* Final line ending change
* Started on issue 78
* Better tests
less failing
* Better tests
less failing (again)
* More work on issue 78
* Issue 78
Better error handling
* Issue 78 formatting
* Less sync blocks
* First commit switching to okhttp
Status
-Compiles and no test failures
Known Issues:
-soApi.revokeRefreshToken() and SsoApi.revokeAccessToken() does nothing.
-SsoApi.getCharacterInfo() is just a wrapper for MetaApi.getVerify()
* More work on okhttp
Known issues:
VerifyResponse.getExpiresOn() return a String should be Java8 Date format?
* swagger codegen 2.3.1
* formatting
* Bug Fix for OAuth
Bug: Code allow you to match a refresh token with just a clientID
* Ok http (#83)
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
* Added fixed openapi-generator.
* Added new openapi generator and made script executable.
* Update ApiClient.java
Use the latest version of Burberius openapi-generator-cli
* 2019-03-11 esi release
2019-03-11 esi release
Promoted
/v3/universe/names/ (now resolve faction ids)
* ApiClientBuilder (#85)
* ApiClientBuilder
* little more work on the builder
* Okhttp fixes (#89)
* Fixed SsoAuth main
* Updated CharacterInfo and SsoApi
-Updated CharacterInfo with better method names + tests
-SsoApi commen
* Update README.md (#88)
* ApiClientBuilder
* little more work on the builder
* Update README.md
-Removed client secret (no longer used)
-Updated link to MarketApiTest, ESI, and SSO
* Formated pom.xml
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@burberius@wing328@ackintosh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors - #2356

Merged
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix
Mar 12, 2019
Merged

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors#2356
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix

Conversation

@burberius

@burberiusburberius commented Mar 10, 2019

Copy link
Copy Markdown
Contributor

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, 3.4.x, 4.0.x. Default: 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 swagger-api/swagger-codegen#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.

GoldenGnu added a commit to GoldenGnu/eve-esi that referenced this pull request Mar 11, 2019
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
burberius pushed a commit to burberius/eve-esi that referenced this pull request Mar 11, 2019
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
@wing328wing328 added this to the 4.0.0 milestone Mar 12, 2019
@wing328

Copy link
Copy Markdown
Member

@burberius thanks for the PR. I notice that the additional tests added by @burberius are not yet included in this PR. I'll submit another PR to add the tests instead.

I tested locally with the new test cases and all tests passed.

Also thanks @ngaya-ll for the original work.

@wing328
wing328 merged commit fde3252 into OpenAPITools:masterMar 12, 2019
@wing328wing328 changed the title Port of @ngaya-ll 's pull request from swagger to openapi.[Java][okhttp-gson] Fix incorrect use of OkHttp interceptorsMar 12, 2019
burberius added a commit to burberius/eve-esi that referenced this pull request Mar 17, 2019
* Line ending changes
Always use lf line ending for *.sed and *.sh files. Use default for everything else.
* More line ending stuff
* Final line ending change
* Started on issue 78
* Better tests
less failing
* Better tests
less failing (again)
* More work on issue 78
* Issue 78
Better error handling
* Issue 78 formatting
* Less sync blocks
* First commit switching to okhttp
Status
-Compiles and no test failures
Known Issues:
-soApi.revokeRefreshToken() and SsoApi.revokeAccessToken() does nothing.
-SsoApi.getCharacterInfo() is just a wrapper for MetaApi.getVerify()
* More work on okhttp
Known issues:
VerifyResponse.getExpiresOn() return a String should be Java8 Date format?
* swagger codegen 2.3.1
* formatting
* Bug Fix for OAuth
Bug: Code allow you to match a refresh token with just a clientID
* Ok http (#83)
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
* Added fixed openapi-generator.
* Added new openapi generator and made script executable.
* Update ApiClient.java
Use the latest version of Burberius openapi-generator-cli
* 2019-03-11 esi release
2019-03-11 esi release
Promoted
/v3/universe/names/ (now resolve faction ids)
* ApiClientBuilder (#85)
* ApiClientBuilder
* little more work on the builder
* Okhttp fixes (#89)
* Fixed SsoAuth main
* Updated CharacterInfo and SsoApi
-Updated CharacterInfo with better method names + tests
-SsoApi commen
* Update README.md (#88)
* ApiClientBuilder
* little more work on the builder
* Update README.md
-Removed client secret (no longer used)
-Updated link to MarketApiTest, ESI, and SSO
* Formated pom.xml
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@burberius@wing328@ackintosh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors - #2356

Merged
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix
Mar 12, 2019
Merged

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors#2356
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix

Conversation

@burberius

@burberiusburberius commented Mar 10, 2019

Copy link
Copy Markdown
Contributor

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, 3.4.x, 4.0.x. Default: 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 swagger-api/swagger-codegen#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.

GoldenGnu added a commit to GoldenGnu/eve-esi that referenced this pull request Mar 11, 2019
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
burberius pushed a commit to burberius/eve-esi that referenced this pull request Mar 11, 2019
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
@wing328wing328 added this to the 4.0.0 milestone Mar 12, 2019
@wing328

Copy link
Copy Markdown
Member

@burberius thanks for the PR. I notice that the additional tests added by @burberius are not yet included in this PR. I'll submit another PR to add the tests instead.

I tested locally with the new test cases and all tests passed.

Also thanks @ngaya-ll for the original work.

@wing328
wing328 merged commit fde3252 into OpenAPITools:masterMar 12, 2019
@wing328wing328 changed the title Port of @ngaya-ll 's pull request from swagger to openapi.[Java][okhttp-gson] Fix incorrect use of OkHttp interceptorsMar 12, 2019
burberius added a commit to burberius/eve-esi that referenced this pull request Mar 17, 2019
* Line ending changes
Always use lf line ending for *.sed and *.sh files. Use default for everything else.
* More line ending stuff
* Final line ending change
* Started on issue 78
* Better tests
less failing
* Better tests
less failing (again)
* More work on issue 78
* Issue 78
Better error handling
* Issue 78 formatting
* Less sync blocks
* First commit switching to okhttp
Status
-Compiles and no test failures
Known Issues:
-soApi.revokeRefreshToken() and SsoApi.revokeAccessToken() does nothing.
-SsoApi.getCharacterInfo() is just a wrapper for MetaApi.getVerify()
* More work on okhttp
Known issues:
VerifyResponse.getExpiresOn() return a String should be Java8 Date format?
* swagger codegen 2.3.1
* formatting
* Bug Fix for OAuth
Bug: Code allow you to match a refresh token with just a clientID
* Ok http (#83)
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
* Added fixed openapi-generator.
* Added new openapi generator and made script executable.
* Update ApiClient.java
Use the latest version of Burberius openapi-generator-cli
* 2019-03-11 esi release
2019-03-11 esi release
Promoted
/v3/universe/names/ (now resolve faction ids)
* ApiClientBuilder (#85)
* ApiClientBuilder
* little more work on the builder
* Okhttp fixes (#89)
* Fixed SsoAuth main
* Updated CharacterInfo and SsoApi
-Updated CharacterInfo with better method names + tests
-SsoApi commen
* Update README.md (#88)
* ApiClientBuilder
* little more work on the builder
* Update README.md
-Removed client secret (no longer used)
-Updated link to MarketApiTest, ESI, and SSO
* Formated pom.xml
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@burberius@wing328@ackintosh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors - #2356

Merged
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix
Mar 12, 2019
Merged

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors#2356
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix

Conversation

@burberius

@burberiusburberius commented Mar 10, 2019

Copy link
Copy Markdown
Contributor

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, 3.4.x, 4.0.x. Default: 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 swagger-api/swagger-codegen#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.

GoldenGnu added a commit to GoldenGnu/eve-esi that referenced this pull request Mar 11, 2019
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
burberius pushed a commit to burberius/eve-esi that referenced this pull request Mar 11, 2019
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
@wing328wing328 added this to the 4.0.0 milestone Mar 12, 2019
@wing328

Copy link
Copy Markdown
Member

@burberius thanks for the PR. I notice that the additional tests added by @burberius are not yet included in this PR. I'll submit another PR to add the tests instead.

I tested locally with the new test cases and all tests passed.

Also thanks @ngaya-ll for the original work.

@wing328
wing328 merged commit fde3252 into OpenAPITools:masterMar 12, 2019
@wing328wing328 changed the title Port of @ngaya-ll 's pull request from swagger to openapi.[Java][okhttp-gson] Fix incorrect use of OkHttp interceptorsMar 12, 2019
burberius added a commit to burberius/eve-esi that referenced this pull request Mar 17, 2019
* Line ending changes
Always use lf line ending for *.sed and *.sh files. Use default for everything else.
* More line ending stuff
* Final line ending change
* Started on issue 78
* Better tests
less failing
* Better tests
less failing (again)
* More work on issue 78
* Issue 78
Better error handling
* Issue 78 formatting
* Less sync blocks
* First commit switching to okhttp
Status
-Compiles and no test failures
Known Issues:
-soApi.revokeRefreshToken() and SsoApi.revokeAccessToken() does nothing.
-SsoApi.getCharacterInfo() is just a wrapper for MetaApi.getVerify()
* More work on okhttp
Known issues:
VerifyResponse.getExpiresOn() return a String should be Java8 Date format?
* swagger codegen 2.3.1
* formatting
* Bug Fix for OAuth
Bug: Code allow you to match a refresh token with just a clientID
* Ok http (#83)
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
* Added fixed openapi-generator.
* Added new openapi generator and made script executable.
* Update ApiClient.java
Use the latest version of Burberius openapi-generator-cli
* 2019-03-11 esi release
2019-03-11 esi release
Promoted
/v3/universe/names/ (now resolve faction ids)
* ApiClientBuilder (#85)
* ApiClientBuilder
* little more work on the builder
* Okhttp fixes (#89)
* Fixed SsoAuth main
* Updated CharacterInfo and SsoApi
-Updated CharacterInfo with better method names + tests
-SsoApi commen
* Update README.md (#88)
* ApiClientBuilder
* little more work on the builder
* Update README.md
-Removed client secret (no longer used)
-Updated link to MarketApiTest, ESI, and SSO
* Formated pom.xml
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@burberius@wing328@ackintosh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors - #2356

Merged
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix
Mar 12, 2019
Merged

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors#2356
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix

Conversation

@burberius

@burberiusburberius commented Mar 10, 2019

Copy link
Copy Markdown
Contributor

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, 3.4.x, 4.0.x. Default: 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 swagger-api/swagger-codegen#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.

GoldenGnu added a commit to GoldenGnu/eve-esi that referenced this pull request Mar 11, 2019
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
burberius pushed a commit to burberius/eve-esi that referenced this pull request Mar 11, 2019
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
@wing328wing328 added this to the 4.0.0 milestone Mar 12, 2019
@wing328

Copy link
Copy Markdown
Member

@burberius thanks for the PR. I notice that the additional tests added by @burberius are not yet included in this PR. I'll submit another PR to add the tests instead.

I tested locally with the new test cases and all tests passed.

Also thanks @ngaya-ll for the original work.

@wing328
wing328 merged commit fde3252 into OpenAPITools:masterMar 12, 2019
@wing328wing328 changed the title Port of @ngaya-ll 's pull request from swagger to openapi.[Java][okhttp-gson] Fix incorrect use of OkHttp interceptorsMar 12, 2019
burberius added a commit to burberius/eve-esi that referenced this pull request Mar 17, 2019
* Line ending changes
Always use lf line ending for *.sed and *.sh files. Use default for everything else.
* More line ending stuff
* Final line ending change
* Started on issue 78
* Better tests
less failing
* Better tests
less failing (again)
* More work on issue 78
* Issue 78
Better error handling
* Issue 78 formatting
* Less sync blocks
* First commit switching to okhttp
Status
-Compiles and no test failures
Known Issues:
-soApi.revokeRefreshToken() and SsoApi.revokeAccessToken() does nothing.
-SsoApi.getCharacterInfo() is just a wrapper for MetaApi.getVerify()
* More work on okhttp
Known issues:
VerifyResponse.getExpiresOn() return a String should be Java8 Date format?
* swagger codegen 2.3.1
* formatting
* Bug Fix for OAuth
Bug: Code allow you to match a refresh token with just a clientID
* Ok http (#83)
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
* Added fixed openapi-generator.
* Added new openapi generator and made script executable.
* Update ApiClient.java
Use the latest version of Burberius openapi-generator-cli
* 2019-03-11 esi release
2019-03-11 esi release
Promoted
/v3/universe/names/ (now resolve faction ids)
* ApiClientBuilder (#85)
* ApiClientBuilder
* little more work on the builder
* Okhttp fixes (#89)
* Fixed SsoAuth main
* Updated CharacterInfo and SsoApi
-Updated CharacterInfo with better method names + tests
-SsoApi commen
* Update README.md (#88)
* ApiClientBuilder
* little more work on the builder
* Update README.md
-Removed client secret (no longer used)
-Updated link to MarketApiTest, ESI, and SSO
* Formated pom.xml
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@burberius@wing328@ackintosh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors - #2356

Merged
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix
Mar 12, 2019
Merged

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors#2356
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix

Conversation

@burberius

@burberiusburberius commented Mar 10, 2019

Copy link
Copy Markdown
Contributor

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, 3.4.x, 4.0.x. Default: 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 swagger-api/swagger-codegen#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.

GoldenGnu added a commit to GoldenGnu/eve-esi that referenced this pull request Mar 11, 2019
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
burberius pushed a commit to burberius/eve-esi that referenced this pull request Mar 11, 2019
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
@wing328wing328 added this to the 4.0.0 milestone Mar 12, 2019
@wing328

Copy link
Copy Markdown
Member

@burberius thanks for the PR. I notice that the additional tests added by @burberius are not yet included in this PR. I'll submit another PR to add the tests instead.

I tested locally with the new test cases and all tests passed.

Also thanks @ngaya-ll for the original work.

@wing328
wing328 merged commit fde3252 into OpenAPITools:masterMar 12, 2019
@wing328wing328 changed the title Port of @ngaya-ll 's pull request from swagger to openapi.[Java][okhttp-gson] Fix incorrect use of OkHttp interceptorsMar 12, 2019
burberius added a commit to burberius/eve-esi that referenced this pull request Mar 17, 2019
* Line ending changes
Always use lf line ending for *.sed and *.sh files. Use default for everything else.
* More line ending stuff
* Final line ending change
* Started on issue 78
* Better tests
less failing
* Better tests
less failing (again)
* More work on issue 78
* Issue 78
Better error handling
* Issue 78 formatting
* Less sync blocks
* First commit switching to okhttp
Status
-Compiles and no test failures
Known Issues:
-soApi.revokeRefreshToken() and SsoApi.revokeAccessToken() does nothing.
-SsoApi.getCharacterInfo() is just a wrapper for MetaApi.getVerify()
* More work on okhttp
Known issues:
VerifyResponse.getExpiresOn() return a String should be Java8 Date format?
* swagger codegen 2.3.1
* formatting
* Bug Fix for OAuth
Bug: Code allow you to match a refresh token with just a clientID
* Ok http (#83)
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
* Added fixed openapi-generator.
* Added new openapi generator and made script executable.
* Update ApiClient.java
Use the latest version of Burberius openapi-generator-cli
* 2019-03-11 esi release
2019-03-11 esi release
Promoted
/v3/universe/names/ (now resolve faction ids)
* ApiClientBuilder (#85)
* ApiClientBuilder
* little more work on the builder
* Okhttp fixes (#89)
* Fixed SsoAuth main
* Updated CharacterInfo and SsoApi
-Updated CharacterInfo with better method names + tests
-SsoApi commen
* Update README.md (#88)
* ApiClientBuilder
* little more work on the builder
* Update README.md
-Removed client secret (no longer used)
-Updated link to MarketApiTest, ESI, and SSO
* Formated pom.xml
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@burberius@wing328@ackintosh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors - #2356

Merged
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix
Mar 12, 2019
Merged

[Java][okhttp-gson] Fix incorrect use of OkHttp interceptors#2356
wing328 merged 1 commit into
OpenAPITools:masterfrom
burberius:okhttp-interceptor-fix

Conversation

@burberius

@burberiusburberius commented Mar 10, 2019

Copy link
Copy Markdown
Contributor

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, 3.4.x, 4.0.x. Default: 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 swagger-api/swagger-codegen#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.

GoldenGnu added a commit to GoldenGnu/eve-esi that referenced this pull request Mar 11, 2019
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
burberius pushed a commit to burberius/eve-esi that referenced this pull request Mar 11, 2019
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
@wing328wing328 added this to the 4.0.0 milestone Mar 12, 2019
@wing328

Copy link
Copy Markdown
Member

@burberius thanks for the PR. I notice that the additional tests added by @burberius are not yet included in this PR. I'll submit another PR to add the tests instead.

I tested locally with the new test cases and all tests passed.

Also thanks @ngaya-ll for the original work.

@wing328
wing328 merged commit fde3252 into OpenAPITools:masterMar 12, 2019
@wing328wing328 changed the title Port of @ngaya-ll 's pull request from swagger to openapi.[Java][okhttp-gson] Fix incorrect use of OkHttp interceptorsMar 12, 2019
burberius added a commit to burberius/eve-esi that referenced this pull request Mar 17, 2019
* Line ending changes
Always use lf line ending for *.sed and *.sh files. Use default for everything else.
* More line ending stuff
* Final line ending change
* Started on issue 78
* Better tests
less failing
* Better tests
less failing (again)
* More work on issue 78
* Issue 78
Better error handling
* Issue 78 formatting
* Less sync blocks
* First commit switching to okhttp
Status
-Compiles and no test failures
Known Issues:
-soApi.revokeRefreshToken() and SsoApi.revokeAccessToken() does nothing.
-SsoApi.getCharacterInfo() is just a wrapper for MetaApi.getVerify()
* More work on okhttp
Known issues:
VerifyResponse.getExpiresOn() return a String should be Java8 Date format?
* swagger codegen 2.3.1
* formatting
* Bug Fix for OAuth
Bug: Code allow you to match a refresh token with just a clientID
* Ok http (#83)
* Generated with openapi-gnerator 3.3.4
Now include meta specs on generation
* Fixed verify not adding auth
* Update SsoApi.java
* user-agent
* Added CharacterInfo.getExpiresOnDate()
* Updated openapi-generator
Generated with Burberius's openapi-generator
OpenAPITools/openapi-generator#2356
* Added fixed openapi-generator.
* Added new openapi generator and made script executable.
* Update ApiClient.java
Use the latest version of Burberius openapi-generator-cli
* 2019-03-11 esi release
2019-03-11 esi release
Promoted
/v3/universe/names/ (now resolve faction ids)
* ApiClientBuilder (#85)
* ApiClientBuilder
* little more work on the builder
* Okhttp fixes (#89)
* Fixed SsoAuth main
* Updated CharacterInfo and SsoApi
-Updated CharacterInfo with better method names + tests
-SsoApi commen
* Update README.md (#88)
* ApiClientBuilder
* little more work on the builder
* Update README.md
-Removed client secret (no longer used)
-Updated link to MarketApiTest, ESI, and SSO
* Formated pom.xml
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@burberius@wing328@ackintosh