這家公司剛剛?cè)肼?,公司舊項(xiàng)目使用spring boot+rouyi框架,剛剛安裝好環(huán)境導(dǎo)入項(xiàng)目就發(fā)現(xiàn)請求接口后,無法得到響應(yīng)并伴隨著異常報(bào)錯(cuò),異常信息如下:



排查步驟
1.在后臺接口添加斷點(diǎn),發(fā)現(xiàn)94行是正常執(zhí)行的,在返回響應(yīng)數(shù)據(jù)時(shí)才異常

2.根據(jù)異常信息提示,在xnio源碼Channels.java:1098行添加斷點(diǎn),并debug

Channels的靜態(tài)代碼塊中會獲取當(dāng)前操作系統(tǒng)名稱并根據(jù)系統(tǒng)不同創(chuàng)建不同的文件輸出流,當(dāng)前我系統(tǒng)為windows 10,所以執(zhí)行1098行,該行代碼使用NUL:作為路徑創(chuàng)建輸出流,異常因?yàn)镹UL:無法使用(具體為什么無法使用暫不可知,后續(xù)有時(shí)間再排查)
3.項(xiàng)目中新建同名包,復(fù)制出該類后修改1098行為下圖并處理異常。此步因閱讀步驟2代碼可知該行目的為使用一個(gè)空文件創(chuàng)建channel。因此在不影響該目的的情況下,我們?nèi)我鈩?chuàng)建一個(gè)文件輸出流。

4.重啟后調(diào)試接口,可正常訪問響應(yīng),到此結(jié)束,NUL:異常未完待續(xù)

5.后續(xù)來了,我得空看了下xnio的提交記錄,發(fā)現(xiàn)就在本月的23號他們修復(fù)了這個(gè)問題并發(fā)布了3.8.4.Final版本,我本想直接升級版本,但是發(fā)現(xiàn)該包由under-tow依賴引入,且undertow的版本只到4月3號,故刪除項(xiàng)目覆蓋的類Channels,排除3.8.4,重新引入3.8.7,到此該問題告一段落。


xnio提交記錄

undertow
