-
Notifications
You must be signed in to change notification settings - Fork 249
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
httpclint 设置 RetryHandler后 重试报空指针 #20
Comments
mark一下 |
@SnailOfLife 能贴一下你设置RetryHandler部分的代码吗 |
你好,我之前也遇到这个问题,业务场景是发生在,微信支付完成后,立马去做查询操作,此时微信如果在处理中,会返回IO异常,IO异常会自动被org.apache.http.impl.execchain的RetryExec捕获并做重试操作,但是由于第一遍请求时,org.apache.http.impl.execchain里的ProtocolExec中,将uri置空了,所以SignatureExec中,request.getURI().getHost().endsWith(".mch.weixin.qq.com")就会报空指针异常。 |
@ccf0411 你好,没太明白具体的场景,还需要你提供更详细的说明
是异步接口?是哪个接口出现的?前面的“完成”是指请求已经发送并收到了微信支付的应答吗? |
我是复用连接的时候,连接已失效导致抛出 NoHttpResponseException。这个时候通过httpclient重试机制时用到的。由于默认的重试机制问题,只有在get的时候遇到这个bug,也就是查询操作。 |
httpClient = builder 其中MyStandardHttpRequestRetryHandler 是模仿 StandardHttpRequestRetryHandler 添加 this.idempotentMethods.put("POST", Boolean.TRUE); 线上是因为采用连接池管理复用连接。当选取一个使用过的连接时,有可能已断开抛出NoHttpResponseException 而导致重试的。这个问题只在新的微信分中遇到过。 |
这样改是个办法。 我来重现下,尽快修复这里。确实是个隐患,非常感谢 @SnailOfLife @ccf0411 提供信息。 |
@xy-peng 请问下,bug修复了吗 |
… absolute URI (as above) or may be a relative URI.
抛出异常:
java.lang.NullPointerException: null
at com.wechat.pay.contrib.apache.httpclient.SignatureExec.execute(SignatureExec.java:48)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
源码:
if (request.getURI().getHost().endsWith(".mch.weixin.qq.com")) {
return executeWithSignature(route, request, context, execAware);
} else {
return mainExec.execute(route, request, context, execAware);
}
原因
当执行第一次后,request中 uri的host被置为null,再次重试,抛出此异常
The text was updated successfully, but these errors were encountered: