728x90
반응형

이 에러는 왜 나오는지 모르겠다.

아래 소스의 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)

 

 

728x90
반응형

+ Recent posts