这家公司刚刚入职,公司旧项目使用spring boot+rouyi框架,刚刚安装好环境导入项目就发现请求接口后,无法得到响应并伴随着异常报错,异常信息如下:
排查步骤
1.在后台接口添加断点,发现94行是正常执行的,在返回响应数据时才异常
2.根据异常信息提示,在xnio源码Channels.java:1098行添加断点,并debug
Channels的静态代码块中会获取当前操作系统名称并根据系统不同创建不同的文件输出流,当前我系统为windows 10,所以执行1098行,该行代码使用NUL:作为路径创建输出流,异常因为NUL:无法使用(具体为什么无法使用暂不可知,后续有时间再排查)
3.项目中新建同名包,复制出该类后修改1098行为下图并处理异常。此步因阅读步骤2代码可知该行目的为使用一个空文件创建channel。因此在不影响该目的的情况下,我们任意创建一个文件输出流。
4.重启后调试接口,可正常访问响应,到此结束,NUL:异常未完待续
5.后续来了,我得空看了下xnio的提交记录,发现就在本月的23号他们修复了这个问题并发布了3.8.4.Final版本,我本想直接升级版本,但是发现该包由under-tow依赖引入,且undertow的版本只到4月3号,故删除项目覆盖的类Channels,排除3.8.4,重新引入3.8.7,到此该问题告一段落。
xnio提交记录
undertow