FastJson格式化Request对象导致的一次异常思考
一、问题描述: ? ? ? ? 近期,在环境中出现一个阻塞性的异常“nested exception is java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false)”。 二、问题影响: ? ? ? ?影响了日工作的正常工作进度; ? ? ? ?阻塞的关键点异常在捕获后被吃掉,未正确打印出来,影响了排查问题的方向。重新打印异常栈后,定位到问题并解决,恢复正常的工作进程。 三、问题复现过程: ? ? ? ?使用JUnit做一个最简单的单元测试,直接Json.from(request) 四、问题分析: ? ? ? ?FastJson是根据bean的get/set方法做反射解析的,当遇到Servlet3规范时(Servlet2.5是否会存在还没验证),恰好存在一个getAsyncContext()方法,内部的判断逻辑是servlet异步模式为false,直接抛出IllegalStateException,导致此种尴尬的异常出现,进而阻塞了工作的进程。 五、问题引发的思考: ? ? ? 1.有没有必要直接打印框架的一些形参,比如Servlet的Request/Response,MQ的onMessage的方法形参,还有HttpClient的Response/ClosableResponse; ? ? ? ? ?直接打印MQ的onMessage的方法形参,看到的是一些二进制数组,没有可读性; ? ? ? ? ?直接打印HttpClient的Response/ClosableResponse,看到的是一些不可读的数据; ? ? ? ? ?直接打印Servlet的Request.getRequestURI,会增加更多的磁盘IO; ? ? ? 2.是否可以考虑打印其中的业务参数,而不是那些比较贴近TCP发送/响应的请求,更多的打印应用层面的业务请求参数和响应结果; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- flex titlewindow 拖动 父窗口范围
- c# – 检查Web API是否可用的好/正确方法是什么?
- ios – CFBundleVersion必须是最多三个非负整数的周期分隔列
- 完全卸载oracle11g步骤
- DDD领域驱动设计基本理论知识总结
- iOS 11文件应用:如何从应用包中包含文件
- ruby-on-rails – MongoMapper和bson_ext问题
- ruby-on-rails – 如何配置database.yml以部署到Heroku
- C. Almost Equal ( Codeforces Round #580 (Div. 2) )
- c# – 从Process StandardOutput获取值