在一次上線的過程中,通過觀察日志發(fā)現(xiàn)有java.lang.NullPointerException的異常出現(xiàn):
異常堆棧
但這個空指針異常并不是我們的服務(wù)拋出的,顯示的是下游服務(wù)拋出來的,但和下游服務(wù)的開發(fā)人員確認,他們最近沒有發(fā)布過服務(wù)。
仔細觀察日志發(fā)現(xiàn):我們的服務(wù)在對下游服務(wù)發(fā)起RPC調(diào)用時,RPC框架在調(diào)用下游服務(wù)的client包時,執(zhí)行了ListThriftCodec.write方法,而這個方法執(zhí)行到boxedLongToLong方法時,拋出了java.lang.NullPointerException的異常。
觀察到這,初步判斷是:我們的服務(wù)在調(diào)用下游服務(wù)時,給一個Long類型的參數(shù)傳了null到下游,導致RPC框架Long轉(zhuǎn)Long的時候拋出了空指針異常。
然后仔細觀察代碼發(fā)現(xiàn):我們對一個Long型參數(shù)沒有做判空,把它寫入到ArrayList中傳給了下游,所以就出現(xiàn)了上面的異常。