java外部捕获了异常,但是并没有打印异常和将异常信息写入日志文件

问题描述

今天在做一个客户需求的二次开发,出现了一个java数组越界但是并没有抛异常,也没有写日志的情况。在公司的系统中,用户提交的表单可能包含有多个明细表。用户提交表单以后可以通过多个Action进行后续的数据校验,数据同步到异构系统等,可根据用户的需求进行灵活的开发。DetailTable[] detailTables = request.getDetails();通过这种方法就可以获取到表单中的所有明细表,然后通过明细表索引来获取。写了大致如下的一个类,结果自己测试的时候发现一直没有正确的结果,查看日志也并没有什么相关的异常信息,通过debug排查之后才发现是数组越界的问题,但是系统调用(我们开发人员写好Action类,然后通过系统后台配置就可以使用这个Action了)的时候在外层捕获了异常,并且没有打印异常,也没有将异常写进日志中去。这个问题挺隐秘的,前人挖的坑啊。

class MyAction implements Action {

	@Override
	public String execute(Request request) {
		DetailTable[] detailTables = request.getDetails();
		int index = 3;
		doSomething(detailTables[index]);
		return SUCCESS;
	}

	public void doSomething(DetailTable detailTable) {

	}

}

原因

外层捕获异常,但是并没有打印异常或者写进日志文件。

public class App {
	public static void main(String[] args) {
		MyAction action = new MyAction();
		String back = Action.SUCCESS;
		try {
			back = action.execute();
		} catch (Exception e) {
		}
		System.out.println(back);
	}
}
原文地址:https://www.cnblogs.com/ZiYangZhou/p/8196425.html