Hi
We are experiencing getting no stacktrace on nullpointerexception in a Spring controller. We have no idea why? And no idea where to look?
Any help will be appreciated
/Casper
Hi
We are experiencing getting no stacktrace on nullpointerexception in a Spring controller. We have no idea why? And no idea where to look?
Any help will be appreciated
/Casper
Hi !
Can you elaborate on your issue ?
The transaction fails, and APM captures the exception. But it is only the first line, ending with "\n" of the stacktrace. So the stacktrace field is in the APM document.
can you provide a copy of the document stored in ES and the original exception stack trace if you have it ?
Also, can you provide your agent version and configuration ?
This is our log line on local output. We are using ver. 1.51.
{"@timestamp":"2024-10-07T08:01:12.656Z","log.level":"ERROR","message":"null","ecs.version": "1.2.0","service.name":"tvangsoploesning-dirigent-service","event.dataset":"application","process.thread.name":"http-nio-9084-exec-2","log.logger":"dk.domstol.tvangsoploesning.dirigent.infrastructure.logging.TvangsoploesningExceptionControllerAdvice","transaction.id":"c94b4f21ac147405","event.action":"ERROR","trace.id":"6a7abb5a2d815fe61f97fc62126b3780","error.type":"java.lang.NullPointerException","error.id":"154e6df5474b741457282b7db337099b","error.type":"java.lang.NullPointerException","error.stack_trace":"java.lang.NullPointerException: null\n\tat java.util.Objects.requireNonNull(Objects.java:233)\n\tat d.d.t.d.domain.common.gateway.person.PersonIntern.<init>(PersonIntern.java:14)\n\tat d.d.t.d.d.common.gateway.person.PersonInternMapper.toInternal(PersonInternMapper.java:18)\n\tat java.util.Optional.map(Optional.java:260)\n\tat d.d.t.d.domain.common.gateway.person.PersonGateway.getById(PersonGateway.java:17)\n\tat d.d.t.d.domain.part.personreference.PersonService.getPartById(PersonService.java:29)\n\tat jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)\n\tat java.lang.reflect.Method.invoke(Method.java:580)\n\tat org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355)\n\tat o.s.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)\n\tat o.s.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n\tat o.s.a.f.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\n\tat o.s.t.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379)\n\tat o.s.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)\n\tat o.s.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\n\tat o.s.a.f.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\n\tat o.s.a.f.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)\n\tat d.d.t.d.d.p.p.PersonService$$SpringCGLIB$$0.getPartById(<generated>)\n\tat d.d.t.dirigent.domain.part.PartService.getPersonPart(PartService.java:140)\n\tat d.d.t.dirigent.domain.part.PartService.getPart(PartService.java:118)\n\tat d.d.t.d.a.command.aktion.intern.OpretSagAktion.getTidligereLedelse(OpretSagAktion.java:195)\n\tat d.d.t.d.a.command.aktion.intern.OpretSagAktion.execute(OpretSagAktion.java:93)\n\tat d.d.t.d.a.c.aktion.intern.InternAktionService.opretSag(InternAktionService.java:105)\n\tat jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)\n\tat java.lang.reflect.Method.invoke(Method.java:580)\n\tat org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355)\n\tat o.s.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)\n\tat o.s.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n\tat o.s.a.f.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\n\tat o.s.t.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379)\n\tat o.s.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)\n\tat o.s.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\n\tat o.s.a.f.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\n\tat o.s.a.f.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)\n\tat d.d.t.d.a.c.a.i.InternAktionService$$SpringCGLIB$$0.opretSag(<generated>)\n\tat d.d.t.dirigent.interfaces.rest.SagInternController.createSag(SagInternController.java:178)\n\tat jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)\n\tat java.lang.reflect.Method.invoke(Method.java:580)\n\tat org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355)\n\tat o.s.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)\n\tat o.s.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n\tat o.s.a.f.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\n\tat o.s.s.a.m.AuthorizationManagerBeforeMethodInterceptor.proceed(AuthorizationManagerBeforeMethodInterceptor.java:269)\n\tat o.s.s.a.m.AuthorizationManagerBeforeMethodInterceptor.attemptAuthorization(AuthorizationManagerBeforeMethodInterceptor.java:264)\n\tat o.s.s.a.m.AuthorizationManagerBeforeMethodInterceptor.invoke(AuthorizationManagerBeforeMethodInterceptor.java:197)\n\tat o.s.s.c.a.m.c.DeferringMethodInterceptor.invoke(DeferringMethodInterceptor.java:44)\n\tat o.s.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\n\tat o.s.a.f.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\n\tat o.s.a.f.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)\n\tat d.d.t.d.i.rest.SagInternController$$SpringCGLIB$$0.createSag(<generated>)\n\tat jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)\n\tat java.lang.reflect.Method.invoke(Method.java:580)\n\tat o.s.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255)\n\tat o.s.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188)\n\tat o.s.w.s.m.m.a.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\n\tat o.s.w.s.m.m.a.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\n\tat o.s.w.s.m.m.a.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\n\tat o.s.w.s.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\n\tat jakarta.servlet.http.HttpServlet.service(HttpServlet.java:547)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\n\tat jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\n\tat d.d.s.security.audit.log.audit.AuditLogUserFilter.doFilter(AuditLogUserFilter.java:32)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\n\tat c.a.o.validator.springmvc.OpenApiValidationFilter.doFilterInternal(OpenApiValidationFilter.java:61)\n\tat o.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\n\tat d.d.spring.logging.log.access.AccessLogApmFilter.doFilter(AccessLogApmFilter.java:27)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\n\tat d.d.spring.logging.log.audit.RequestMetadataFilter.doFilter(RequestMetadataFilter.java:26)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\n\tat o.s.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)\n\tat org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231)\n\tat o.s.s.w.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479)\n\tat o.s.s.w.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340)\n\tat o.s.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82)\n\tat o.s.s.w.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128)\n\tat o.s.s.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100)\n\tat o.s.s.w.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)\n\tat o.s.s.w.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)\n\tat o.s.s.w.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)\n\tat o.s.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)\n\tat o.s.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)\n\tat o.s.s.w.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)\n\tat o.s.s.w.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)\n\tat o.s.s.w.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)\n\tat o.s.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131)\n\tat o.s.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85)\n\t... 91 frames truncated\n"}
this is our APM config:
- name: ELASTIC_APM_SERVER_URLS
value: 'https://XXXXXXXXXXX:443'
- name: ELASTIC_APM_SERVICE_NAME
value: adgangsprofil-register-spring
- name: ELASTIC_APM_APPLICATION_PACKAGES
value: dk.domstol
- name: ELASTIC_APM_ENVIRONMENT
value: development
- name: ELASTIC_APM_LOG_LEVEL
value: INFO
- name: JAVA_TOOL_OPTIONS
value: '-javaagent:/elastic/apm/agent/elastic-apm-agent.jar'
- name: ELASTIC_APM_VERIFY_SERVER_CERT
value: 'false'
The stack trace is in the log line you provided (the NPE is from d.d.t.d.domain.common.gateway.person.PersonIntern.<init>(PersonIntern.java:14)
)
Yes, but APM doesn't capture the stacktrace. We want to know why.
That log line is showing the stack trace in the error.stack_trace
field, where are you expecting to see it?
© 2020. All Rights Reserved - Elasticsearch
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant logo are trademarks of the Apache Software Foundation in the United States and/or other countries.