在一次上线的过程中,通过观察日志发现有java.lang.NullPointerException的异常出现:

空指针异常避免方式(一次空指针的排查盛宴)(1)

异常堆栈

但这个空指针异常并不是我们的服务抛出的,显示的是下游服务抛出来的,但和下游服务的开发人员确认,他们最近没有发布过服务。

仔细观察日志发现:我们的服务在对下游服务发起RPC调用时,RPC框架在调用下游服务的client包时,执行了ListThriftCodec.write方法,而这个方法执行到boxedLongToLong方法时,抛出了java.lang.NullPointerException的异常。

观察到这,初步判断是:我们的服务在调用下游服务时,给一个Long类型的参数传了null到下游,导致RPC框架Long转Long的时候抛出了空指针异常。

然后仔细观察代码发现:我们对一个Long型参数没有做判空,把它写入到ArrayList中传给了下游,所以就出现了上面的异常。

,