服务器上有个支付结果通知重试的服务,在service应用日志里总是报这个错误。一哥们早先说解决,阴差阳错的,这问题到现在也一直存在。
2018-04-13 12:03:45.773 [refundQuery_120345735_3CA9F] INFO [ExceptionAspect] - 耗时:39ms 2018-04-13 12:03:58.865 [1455973373@qtp-1078507879-197] ERROR [org.mortbay.log] - /com.emax.paycenter.backend.service.PaycenterNotifyRetryService java.lang.NullPointerException: null at com.ofpay.dubbo.rpc.protocol.jsonrpc.JsonRpcProtocol$InternalHandler.handle(JsonRpcProtocol.java:59) ~[dubbo-rpc-jsonrpc-1.0.1.jar:na] at com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet.service(DispatcherServlet.java:64) ~[emei-dubbo-2.4.11.jar:2.4.11] at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) ~[servlet-api.jar:na] at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) ~[jetty-6.1.26.jar:6.1.26] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401) ~[jetty-6.1.26.jar:6.1.26] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) [jetty-6.1.26.jar:6.1.26] at org.mortbay.jetty.Server.handle(Server.java:326) [jetty-6.1.26.jar:6.1.26] at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) [jetty-6.1.26.jar:6.1.26] at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945) [jetty-6.1.26.jar:6.1.26] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) [jetty-6.1.26.jar:6.1.26] at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) [jetty-6.1.26.jar:6.1.26] at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) [jetty-6.1.26.jar:6.1.26] at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) [jetty-6.1.26.jar:6.1.26] at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) [jetty-util-6.1.26.jar:6.1.26] 2018-04-13 12:04:15.830 [refundQuery_120415830_8E57A] INFO [IPayCenterFacadeImpl] - 调用服务:refundQuery 2018-04-13 12:04:15.831 [refundQuery_120415830_8E57A] INFO [IPayCenterFacadeImpl] - 请求参数:{"biz_system":"5"......
今天因为要测试数据在监视服务器日志,这个异常蹦出来的次数太多,干扰我监控。于是,决定先看看这个异常是咋回事。
乍看呢,是有些无从下手!因为异常堆栈里并没有指明是程序里哪个class的哪行代码。那就要靠灵光乍现了~~
这个重试服务是用dubbo发布的接口。
看这个NullPointerException,突然想起来,是不是这个服务不存在呢?
查看代码,果然发现,PaycenterNotifyRetryService的package名是com.emax.paycenter.api.service。
那是哪里调用这个接口呢? 想起来之前我们在调度中心有配置了调用。
这里配置的接口地址是http://192.168.40.240:9995/com.emax.paycenter.backend.service.PaycenterNotifyRetryService?method=notifyRetry,与异常里描述的接口地址一致。 那看来就是这里导致的了。 改正后,问题解决了 。
查看svn改动记录,发现,从18/1/17的版本号3601之后,这个接口地址就被改成现在的了。
<dubbo:service protocol="dubbo,jsonrpc" interface="com.emax.paycenter.api.service.PaycenterNotifyRetryService" ref="notifyService" timeout="${dubbo.timeout}" retries="${dubbo.retries}" />
svn history: