问题描述
今天在做一个客户需求的二次开发,出现了一个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);
}
}
|