이 에러는 왜 나오는지 모르겠다.
아래 소스의 19번 라인에서 발생된 에러이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
@Transactional(rollbackOn = {Exception.class})
public void workingProcess() {
// 스케줄 로그를 남기기 위한 DTO 선언
SchdScheduleLogReqDTO logReqDTO = new SchdScheduleLogReqDTO(Thread.currentThread().getStackTrace()[1].getMethodName());
Integer instCnt = 0;
Integer updCnt = 0;
Integer delCnt = 0;
try {
List<String> pathList = mapperClass.getPathList();
if (pathList != null && pathList.size() > 0) {
// row insert, update 작업 진행.
// logReqDTO = callMethod(pathList, logReqDTO);
if (logReqDTO != null && logReqDTO.getInstCnt() != null && logReqDTO.getInstCnt() > 0) { // break point instCnt에 11로 수정
SearchSchdUReqDTO reqDTO = new SearchSchdUReqDTO();
reqDTO.setUseYn("Y");
reqDTO.setNotNullWrtUpdDt(true);
reqDTO.setLastUpdHours(1);
reqDTO.setDList(pathList);
List<SchdUResDTO> newUList = mapperClass.getUList(reqDTO); // exception 발생
/* .... 중간 작업 생략 .... */
}
}
logReqDTO.setInstCnt(logReqDTO.getInstCnt() + instCnt);
logReqDTO.setUpdCnt(logReqDTO.getUpdCnt() + updCnt);
logReqDTO.setDelCnt(logReqDTO.getDelCnt() + delCnt);
mapperClass.insertScheduleLog(logReqDTO);
} catch (Exception e) {
e.printStackTrace();
}
}
|
cs |
에러를 재현하면 아래와 같다.
1. 테스트를 위해 12번 라인은 주석 처리 했다.
2. 14번 부터 실행하기 위해 13번 라인에서 break point를 잡고 logReqDTO의 instCnt를 11로 변경했다.
3. 19번에서 해당 에러가 발생한다.
해당 부분의 Array 형태라고는 18번 라인의 reqDTO.setDList(pathList); 부분 뿐이다.
또한, 동일한 값으로 해당 mybatis를 실행하기 위해서 별도의 메소드에서 따로 실행했을때는 문제가 없었다.
마지막으로 java.lang.ArrayIndexOutOfBoundsException: Index 11 out of bounds for length 1 에서 11은
내가 임의로 넣어준 instCnt의 값과 동일하게 변하면서 에러가 난다.
당황해서 1시간 이상 삽질을 했는데.. 결론은 사용하지도 않는 값이 index로 값으로 사용한다는 것이다. (왜?)
해당 값을 19번 라인에서 사용되는 reqDTO에서는 쓰지도 않는데... 왜일까?
에러가 발생한 상황은 테스트를 위한 것으로 정상 실행시는 문제가 없다.
그래서 현재로서는 이 문제는 미궁에 빠진체 알 수 없게 되었다.
참고로 java.lang.ArrayIndexOutOfBoundsException: Index 11 out of bounds for length 1
이와 같은 에러는 일반적으로 Array에서 없는 index를 사용하려고 할 발생한다.
* 에러 전문 ===================================================================================
java.lang.ArrayIndexOutOfBoundsException: Index 11 out of bounds for length 1
at org.apache.ibatis.reflection.ParamNameResolver.getNamedParams(ParamNameResolver.java:115)
at org.apache.ibatis.binding.MapperMethod$MethodSignature.convertArgsToSqlCommandParam(MapperMethod.java:309)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:142)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80)
at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:144)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
at jdk.proxy2/jdk.proxy2.$Proxy136.getUrlList(Unknown Source)
at packagename.core.schedule.service.ScheduleService.workingProcess(ScheduleService.java:107)
at packagename.core.schedule.service.ScheduleService$$FastClassBySpringCGLIB$$efabd1f.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)
at packagename.core.schedule.service.ScheduleService$$EnhancerBySpringCGLIB$$20ec79ba.getPostInfoFromTistoryBlog()
at packagename.web.BaseController.testPost9(BaseController.java:121)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)