jfinal-weixin 最新版,及最新测试代码.
package com.jfinal.weixin.sdk.api;
import java.io.IOException;
/** * AccessTokenApi 测试 */ public class AccessTokenApiTest {
public static void main(String[] args) throws IOException {
ApiConfig ac = new ApiConfig();
ac.setAppId("wx5d6604a5d4cfaee93");// 这是一个错误的appid
ac.setAppSecret("ff7971a6fd9dc409d185e81c63025799");// 密码
// ac.setAppId("wx9803d1188fa5fbda");
// ac.setAppSecret("db859c968763c582794e7c3d003c3d87");
ApiConfigKit.setThreadLocalApiConfig(ac);
AccessToken at = AccessTokenApi.getAccessToken();
System.out.println(at.getJson());
if (at.isAvailable()) {
System.out.println("access_token : " + at.getAccessToken());// token值
System.out.println("getExpiresIn : " + at.getExpiresIn());// 超时时间,单位为秒
System.out.println("getJson : " + at.getJson());
} else {
System.out.println(at.getErrorCode() + " : " + at.getErrorMsg());
}
}
}
我测试以上代码,发现会发生死循环.导致jvm宕掉.
然后我断点看一下执行过程.
1. com.jfinal.weixin.sdk.api.AccessTokenApi getAccessToken会先执行.然后getAccessToken获取到的值无效的话,再去执行refreshAccessToken这个方法. 2.refreshAccessToken 方法原意是重试3次. 就放弃. 但问题是 String json = HttpKit.get(url, queryParas); result = new AccessToken(json);// 此处代码里面封装了一个apiresult对象.而ApiResult里面有可能会调用refreshAccessTokenIfInvalid方法.然后refreshAccessTokenIfInvalid这个方法又会有机会重新执行
refreshAccessToken .这样死循环就重现了
问题重现很容易,在测试代码里面,把appid输错一个数字就出现了.
请各位看一下,这是不是一个问题?或者有什么好的方法规避一下?
@JFinal
已经修改,感谢反馈!######好像有这个问题###### 刚看了一下代码,应该不会有这个问题,refreshAccessToken() 方法中并没有 ApiResult 的操作,AccessToken 中也没有 ApiResult 的操作,所以如果 access token 获取失败三次调用流程就会终止。
可能是其它原因引起的问题,希望楼主调试一下程序,找到原因后来此再分享一下。 ######
//截图重新压缩后,有点模糊了.
james,就是上面那个执行流程形成了回路.
不知道把刷新token的方法
void com.jfinal.weixin.sdk.api.ApiResult.refreshAccessTokenIfInvalid()
放回这个类本身
com.jfinal.weixin.sdk.api.AccessToken
会不会显得更加直接一点.这样ApiResult构造方法变为
@SuppressWarnings("unchecked") public ApiResult(String jsonStr) { this.json = jsonStr;
try {
Map<String, Object> temp = JsonUtils.decode(jsonStr, Map.class);
this.attrs = temp;
// 如果需要,刷新token
//这里注释掉就OK. //refreshAccessTokenIfInvalid(); } catch (Exception e) { throw new RuntimeException(e); } }
######我本地的代码是没有ApiResult 这部分代码的,刚看了一下是线上的有这个代码,团队开发出了点小状况######我本地是没有的,团队开发出了点小状况 ######嘿嘿,没注意这块,目前已经修改了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。