Title: 部分请求方法会造成无限递归 · Issue #1591 · binarywang/WxJava · GitHub
Open Graph Title: 部分请求方法会造成无限递归 · Issue #1591 · binarywang/WxJava
X Title: 部分请求方法会造成无限递归 · Issue #1591 · binarywang/WxJava
Description: 简要描述 在开发过程中发现 BaseWxMpServiceImpl.execute()调用 executeInternal方法 异常内 如果出现指定code会刷新token后调用execute() 而execute()方法终止条件为 为方法变量 int retryTimes = 0; 那么会如果一直出现指定code会造成无限递归 模块版本情况 WxJava 模块名: weixin-java-mp WxJava 版本号:3.7.0 详细描述 public
Open Graph Description: 简要描述 在开发过程中发现 BaseWxMpServiceImpl.execute()调用 executeInternal方法 异常内 如果出现指定code会刷新token后调用execute() 而execute()方法终止条件为 为方法变量 int retryTimes = 0; 那么会如果一直出现指定code会造成无限递归 模块版本情况 WxJava 模块名: weixin-java-...
X Description: 简要描述 在开发过程中发现 BaseWxMpServiceImpl.execute()调用 executeInternal方法 异常内 如果出现指定code会刷新token后调用execute() 而execute()方法终止条件为 为方法变量 int retryTimes = 0; 那么会如果一直出现指定code会造成无限递归 模块版本情况 WxJava 模块名: weixin-java-...
Opengraph URL: https://github.com/binarywang/WxJava/issues/1591
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"部分请求方法会造成无限递归","articleBody":"### 简要描述\r\n在开发过程中发现 BaseWxMpServiceImpl.execute()调用 executeInternal方法 异常内 如果出现指定code会刷新token后调用execute()\r\n而execute()方法终止条件为 为方法变量 int retryTimes = 0; 那么会如果一直出现指定code会造成无限递归\r\n\r\n### 模块版本情况\r\n* WxJava 模块名: weixin-java-mp\r\n* WxJava 版本号:3.7.0\r\n\r\n### 详细描述\r\n\r\n public \u003cT, E\u003e T execute(RequestExecutor\u003cT, E\u003e executor, String uri, E data) throws WxErrorException {\r\n int retryTimes = 0;\r\n\r\n while(true) {\r\n try {\r\n return this.executeInternal(executor, uri, data);\r\n } catch (WxErrorException var10) {\r\n if (retryTimes + 1 \u003e this.maxRetryTimes) {\r\n log.warn(\"重试达到最大次数【{}】\", this.maxRetryTimes);\r\n throw new RuntimeException(\"微信服务端异常,超出重试次数\");\r\n }\r\n\r\n WxError error = var10.getError();\r\n if (error.getErrorCode() != -1) {\r\n throw var10;\r\n }\r\n\r\n int sleepMillis = this.retrySleepMillis * (1 \u003c\u003c retryTimes);\r\n\r\n try {\r\n log.warn(\"微信系统繁忙,{} ms 后重试(第{}次)\", sleepMillis, retryTimes + 1);\r\n Thread.sleep((long)sleepMillis);\r\n } catch (InterruptedException var9) {\r\n throw new RuntimeException(var9);\r\n }\r\n\r\n if (retryTimes++ \u003e= this.maxRetryTimes) {\r\n log.warn(\"重试达到最大次数【{}】\", this.maxRetryTimes);\r\n throw new RuntimeException(\"微信服务端异常,超出重试次数\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected \u003cT, E\u003e T executeInternal(RequestExecutor\u003cT, E\u003e executor, String uri, E data) throws WxErrorException {\r\n E dataForLog = DataUtils.handleDataWithSecret(data);\r\n if (uri.contains(\"access_token=\")) {\r\n throw new IllegalArgumentException(\"uri参数中不允许有access_token: \" + uri);\r\n } else {\r\n String accessToken = this.getAccessToken(false);\r\n String uriWithAccessToken = uri + (uri.contains(\"?\") ? \"\u0026\" : \"?\") + \"access_token=\" + accessToken;\r\n\r\n try {\r\n T result = executor.execute(uriWithAccessToken, data, WxType.MP);\r\n log.debug(\"\\n【请求地址】: {}\\n【请求参数】:{}\\n【响应数据】:{}\", new Object[]{uriWithAccessToken, dataForLog, result});\r\n return result;\r\n } catch (WxErrorException var9) {\r\n WxError error = var9.getError();\r\n if (error.getErrorCode() == 42001 || error.getErrorCode() == 40001 || error.getErrorCode() == 40014) {\r\n this.getWxMpConfigStorage().expireAccessToken();\r\n if (this.getWxMpConfigStorage().autoRefreshToken()) {\r\n return this.execute(executor, uri, data);\r\n }\r\n }\r\n\r\n if (error.getErrorCode() != 0) {\r\n log.error(\"\\n【请求地址】: {}\\n【请求参数】:{}\\n【错误信息】:{}\", new Object[]{uriWithAccessToken, dataForLog, error});\r\n throw new WxErrorException(error, var9);\r\n } else {\r\n return null;\r\n }\r\n } catch (IOException var10) {\r\n log.error(\"\\n【请求地址】: {}\\n【请求参数】:{}\\n【异常信息】:{}\", new Object[]{uriWithAccessToken, dataForLog, var10.getMessage()});\r\n throw new WxErrorException(WxError.builder().errorMsg(var10.getMessage()).build(), var10);\r\n }\r\n }\r\n }\r\n","author":{"url":"https://github.com/shuxuefu","@type":"Person","name":"shuxuefu"},"datePublished":"2020-05-29T07:42:30.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":6},"url":"https://github.com/1591/WxJava/issues/1591"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:804a42dd-339f-b092-45af-e76c48a32380 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | CCF6:32E10C:227EC8F:2E8BF24:6A653CE0 |
| html-safe-nonce | cf88902b2cab99f8dfe4b617ff5c2d598d71039bfb4a9e92f10335acc2186b4c |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDQ0Y2OjMyRTEwQzoyMjdFQzhGOjJFOEJGMjQ6NkE2NTNDRTAiLCJ2aXNpdG9yX2lkIjoiNTQ0NDAyNTM5NzcwNDczNTk2OCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 8b68d01a19fbbfb9b603514a329fbbfe1753a5bab187a53ad655a1c989bcf8f4 |
| hovercard-subject-tag | issue:627067836 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/binarywang/WxJava/1591/issue_layout |
| twitter:image | https://opengraph.githubassets.com/04cf0c7ee6ebf78aff247a8487b36e79b99edea70f76adb89c8e5a15a18bc3b8/binarywang/WxJava/issues/1591 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/04cf0c7ee6ebf78aff247a8487b36e79b99edea70f76adb89c8e5a15a18bc3b8/binarywang/WxJava/issues/1591 |
| og:image:alt | 简要描述 在开发过程中发现 BaseWxMpServiceImpl.execute()调用 executeInternal方法 异常内 如果出现指定code会刷新token后调用execute() 而execute()方法终止条件为 为方法变量 int retryTimes = 0; 那么会如果一直出现指定code会造成无限递归 模块版本情况 WxJava 模块名: weixin-java-... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | shuxuefu |
| hostname | github.com |
| expected-hostname | github.com |
| None | 52c76df668885aaff23b50bdca1fa1ea44ac9c1553e888ebc70ff1e4daa4625b |
| turbo-cache-control | no-preview |
| go-import | github.com/binarywang/WxJava git https://github.com/binarywang/WxJava.git |
| octolytics-dimension-user_id | 1343140 |
| octolytics-dimension-user_login | binarywang |
| octolytics-dimension-repository_id | 49122742 |
| octolytics-dimension-repository_nwo | binarywang/WxJava |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 49122742 |
| octolytics-dimension-repository_network_root_nwo | binarywang/WxJava |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 309153364422b3c499922d1a2a6404910a58ed8e |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width