問題描述
今天在做一個客戶需求的二次開發,出現了一個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);
}
}