Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NullPointerException occurred accidentally #2961

Closed
timandy opened this issue Sep 21, 2023 · 10 comments
Closed

NullPointerException occurred accidentally #2961

timandy opened this issue Sep 21, 2023 · 10 comments

Comments

@timandy
Copy link

timandy commented Sep 21, 2023

Occasional errors do not always occur

mybatis version: 3.5.13
mybatis-spring: 2.1.1
mysql-connector-j: 8.1.0
atomikos-util: 4.0.6

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.NullPointerException
### The error may exist in class path resource [mapper/clst/ExaminationMapper.xml]
### The error may involve com.iflytek.clst.dao.clst.ExaminationDao.statisticModuleAvgScore
### The error occurred while executing a query
### Cause: java.lang.NullPointerException ---> org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.NullPointerException
### The error may exist in class path resource [mapper/clst/ExaminationMapper.xml]
### The error may involve com.iflytek.clst.dao.clst.ExaminationDao.statisticModuleAvgScore
### The error occurred while executing a query
### Cause: java.lang.NullPointerException ---> java.lang.NullPointerException: 引发类型为“java.lang.NullPointerException”的异常。
   --- 内部异常堆栈跟踪的结尾 ---
   在 org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
   在 org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:156)
   在 org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
   在 org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142)
   在 org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75)
   在 sun.reflect.GeneratedMethodAccessor82.invoke(Unknown Source)
   在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   在 java.lang.reflect.Method.invoke(Method.java:498)
   在 org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)
   在 com.sun.proxy.$Proxy112.selectOne(Unknown Source)
   在 org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160)
   在 com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89)
   在 com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
   在 com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
   在 com.sun.proxy.$Proxy134.statisticModuleAvgScore(Unknown Source)
   在 com.iflytek.clst.service.ExaminationService.statisticModuleAvgScore(ExaminationService.java:37)
   在 com.iflytek.clst.controller.student.ExaminationController.statisticModuleAvgScore(ExaminationController.java:24)
   在 com.iflytek.clst.controller.student.ExaminationController$$FastClassBySpringCGLIB$$74db6f41.invoke(<generated>)
   在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
   在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
   在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
   在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
   在 org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58)
   在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
   在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
   在 org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)
   在 com.rrslj.alpha.spring.aspect.ControllerAspect.around(ControllerAspect.java:46)
   在 sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
   在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   在 java.lang.reflect.Method.invoke(Method.java:498)
   在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)
   在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)
   在 org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)
   在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
   在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
   在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
   在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
   在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
   在 org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
   在 com.iflytek.clst.controller.student.ExaminationController$$EnhancerBySpringCGLIB$$5d6ab72e.statisticModuleAvgScore(<generated>)
   在 sun.reflect.GeneratedMethodAccessor128.invoke(Unknown Source)
   在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   在 java.lang.reflect.Method.invoke(Method.java:498)
   在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
   在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
   在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
   在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
   在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
   在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
   在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
   在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
   在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
   在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
   在 javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
   在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
   在 javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 com.github.xiaoymin.knife4j.spring.filter.ProductionSecurityFilter.doFilter(ProductionSecurityFilter.java:62)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 com.github.xiaoymin.knife4j.spring.filter.SecurityBasicAuthFilter.doFilter(SecurityBasicAuthFilter.java:98)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:114)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
   在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
   在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
   在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 com.rrslj.alpha.spring.servlet.DispatcherFilter.doFilter(DispatcherFilter.java:51)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
   在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
   在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
   在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
   在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
   在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
   在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
   在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
   在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
   在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
   在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1790)
   在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
   在 org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
   在 org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
   在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
   在 java.lang.Thread.run(Thread.java:748)
   --- 内部异常堆栈跟踪的结尾 ---
   在 org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:97)
   在 org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)
   在 com.sun.proxy.$Proxy112.selectOne(Unknown Source)
   在 org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160)
   在 com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89)
   在 com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
   在 com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
   在 com.sun.proxy.$Proxy134.statisticModuleAvgScore(Unknown Source)
   在 com.iflytek.clst.service.ExaminationService.statisticModuleAvgScore(ExaminationService.java:37)
   在 com.iflytek.clst.controller.student.ExaminationController.statisticModuleAvgScore(ExaminationController.java:24)
   在 com.iflytek.clst.controller.student.ExaminationController$$FastClassBySpringCGLIB$$74db6f41.invoke(<generated>)
   在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
   在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
   在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
   在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
   在 org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58)
   在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
   在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
   在 org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)
   在 com.rrslj.alpha.spring.aspect.ControllerAspect.around(ControllerAspect.java:46)
   在 sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
   在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   在 java.lang.reflect.Method.invoke(Method.java:498)
   在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)
   在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)
   在 org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)
   在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
   在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
   在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
   在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
   在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
   在 org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
   在 com.iflytek.clst.controller.student.ExaminationController$$EnhancerBySpringCGLIB$$5d6ab72e.statisticModuleAvgScore(<generated>)
   在 sun.reflect.GeneratedMethodAccessor128.invoke(Unknown Source)
   在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   在 java.lang.reflect.Method.invoke(Method.java:498)
   在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
   在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
   在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
   在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
   在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
   在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
   在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
   在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
   在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
   在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
   在 javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
   在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
   在 javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 com.github.xiaoymin.knife4j.spring.filter.ProductionSecurityFilter.doFilter(ProductionSecurityFilter.java:62)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 com.github.xiaoymin.knife4j.spring.filter.SecurityBasicAuthFilter.doFilter(SecurityBasicAuthFilter.java:98)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:114)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
   在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
   在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
   在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 com.rrslj.alpha.spring.servlet.DispatcherFilter.doFilter(DispatcherFilter.java:51)
   在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
   在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
   在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
   在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
   在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
   在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
   在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
   在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
   在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
   在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
   在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
   在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
   在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1790)
   在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
   在 org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
   在 org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
   在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
   在 java.lang.Thread.run(Thread.java:748)
@harawata
Copy link
Member

Hello @timandy ,

The stack trace looks incomplete.
Please post the entire stack trace without modifying it.

Or, provide a repro project that reproduces the NullPointerException.
And when you create the project, please make it as simple as possible (i.e. no atomikos, no mybatis-plus).
If it's a MyBatis (or mybatis-spring) bug, it must be reproduced without third party products.
There are some project templates and examples in this repo: https://github.com/harawata/mybatis-issues

@timandy
Copy link
Author

timandy commented Sep 21, 2023

Hi @harawata Thans for your reply.

The stack content has not been modified, it has only been translated.
The probability of this problem occurring is very low, so even if I write a sample, I am not sure if it can be replicated.
Next, I will try to write an example.

# The util for translate stacktrace
public final class ThrowableUtils {
    /**
     * 获取异常详细信息
     *
     * @param throwable
     * @return
     */
    public static String getString(Throwable throwable) {
        if (throwable == null)
            return StringUtils.EMPTY;
        StringBuilder builder = new StringBuilder();
        String clazzName = throwable.getClass().getName();
        builder.append(clazzName).append(": ");
        String message = throwable.getLocalizedMessage();
        if (StringUtils.isEmpty(message))
            builder.append("引发类型为“").append(clazzName).append("”的异常。");
        else
            builder.append(message);
        Throwable innerThrowable = throwable.getCause();
        if (innerThrowable != null)
            builder.append(" ---> ").append(getString(innerThrowable)).append(Environment.NewLine).append("   --- 内部异常堆栈跟踪的结尾 ---");
        StackTraceElement[] traces = throwable.getStackTrace();
        if (traces != null)
            for (StackTraceElement trace : traces)
                builder.append(Environment.NewLine).append("   在 ").append(trace);
        return builder.toString();
    }

    /**
     * 获取异常简略信息
     *
     * @param throwable
     * @return
     */
    public static String getMessage(Throwable throwable) {
        if (throwable == null)
            return StringUtils.EMPTY;
        String message = throwable.getLocalizedMessage();
        return StringUtils.isEmpty(message) ? "引发类型为“" + throwable.getClass().getName() + "”的异常。" : message;
    }
}

@harawata
Copy link
Member

harawata commented Sep 21, 2023

@timandy ,

That class basically removes the root causes deeper than the first level, I think.
Please do not use that class.

@timandy
Copy link
Author

timandy commented Sep 21, 2023

@harawata The ThrowableUtils print casuse first, not remove root causes.

@harawata
Copy link
Member

@timandy ,

Umm.... could you just exclude the class anyway?
We need to see the original stack trace as is.

In that class, innerThrowable may wrap another Throwable, which may wrap another Throwable, and so on...
You really should not try to modify (or "translate") stack trace.

@codeSoupSz
Copy link

!

@timandy
Copy link
Author

timandy commented May 6, 2024

The bug was in atomikos, see atomikos/transactions-essentials#36 (comment)

@timandy timandy closed this as completed May 6, 2024
@harawata
Copy link
Member

harawata commented May 6, 2024

Thank you for the update, @timandy !
As the linked issue is closed, the problem has been resolved in the latest version of atomikos at least, I guess?

@timandy
Copy link
Author

timandy commented May 7, 2024

Hi @harawata, I am not sure this bug is fiexed or not in the latest version of atomikos.
I reviewed the latest version of Class ConnectionPoolWithConcurrentValidation, may be the bug is still there.
We use SpringBoot 2.7.15, mybatis-plus 3.5.3.2, mybatis-spring 2.1.1, mybatis 3.5.13, atomikos 4.0.6 and alibaba's connectionPool druid 1.2.16.

@harawata
Copy link
Member

harawata commented May 7, 2024

@timandy ,

I see. Thanks for the info!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants