Uploaded image for project: 'camunda BPM'
  1. camunda BPM
  2. CAM-11448

NullPointerException when empty string is passed in errorDetails when reporting external task failure

XMLWordPrintable

      What are the steps to reproduce your problem?

      Camunda 7.12.0-ee
      Oracle Database

      • Start a process instance that contains an external task
      • Call the REST api external-task/fetchAndLock to fetch and lock the task for topic defined in external task.
      • Call the REST api external-task/externalTaskId/failure and set errorDetails as empty string.
         { "workerId": "aWorkerId", "errorMessage": "testerror", "errorDetails":"", "retries": 0 } 
      • An incident would be created in the Cockpit for this process instance
      • Go to "Incidents" tab and clicked on an error message
      • An error message is thrown - "Server Error : The server reported an internal error. Try to refresh the page or login and out of the application."
      • And server log contains NullPointerException:
        020-02-19 15:52:04.880  WARN 5926 --- [nio-8080-exec-1] org.camunda.bpm.engine.rest.exception    : ENGINE-REST-HTTP500 java.lang.NullPointerException
        	at java.lang.String.<init>(String.java:515)
        	at org.camunda.bpm.engine.impl.util.StringUtil.fromBytes(StringUtil.java:126)
        	at org.camunda.bpm.engine.impl.util.StringUtil.fromBytes(StringUtil.java:112)
        	at org.camunda.bpm.engine.impl.util.ExceptionUtil.getExceptionStacktrace(ExceptionUtil.java:46)
        	at org.camunda.bpm.engine.impl.persistence.entity.ExternalTaskEntity.getErrorDetails(ExternalTaskEntity.java:278)
        	at org.camunda.bpm.engine.impl.cmd.GetExternalTaskErrorDetailsCmd.execute(GetExternalTaskErrorDetailsCmd.java:54)
        	at org.camunda.bpm.engine.impl.cmd.GetExternalTaskErrorDetailsCmd.execute(GetExternalTaskErrorDetailsCmd.java:32)
        	at org.camunda.bpm.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:28)
        	at org.camunda.bpm.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:110)
        	at org.camunda.bpm.engine.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:46)
        	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
        	at org.camunda.bpm.engine.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:44)
        	at org.camunda.bpm.engine.impl.interceptor.ProcessApplicationContextInterceptor.execute(ProcessApplicationContextInterceptor.java:70)
        	at org.camunda.bpm.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)
        	at org.camunda.bpm.engine.impl.ExternalTaskServiceImpl.getExternalTaskErrorDetails(ExternalTaskServiceImpl.java:100)
        	at org.camunda.bpm.engine.rest.sub.externaltask.impl.ExternalTaskResourceImpl.getErrorDetails(ExternalTaskResourceImpl.java:77)
        	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:498)
        	at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
        	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)
        	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)
        	at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219)
        	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)
        	at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)
        	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)
        	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)
        	at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)
        	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
        	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
        	at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
        	at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
        	at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
        	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
        	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
        	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
        	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:392)
        	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
        	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:365)
        	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:318)
        	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        	at org.camunda.bpm.webapp.impl.engine.ProcessEnginesFilter.applyFilter(ProcessEnginesFilter.java:130)
        	at org.camunda.bpm.webapp.impl.filter.AbstractTemplateFilter.doFilter(AbstractTemplateFilter.java:58)
        	at org.camunda.bpm.spring.boot.starter.webapp.filter.LazyDelegateFilter.doFilter(LazyDelegateFilter.java:60)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        	at org.camunda.bpm.webapp.impl.security.filter.headersec.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:87)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        	at org.camunda.bpm.spring.boot.starter.webapp.filter.SpringBootCsrfPreventionFilter.doFilter(SpringBootCsrfPreventionFilter.java:136)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        	at org.camunda.bpm.webapp.impl.security.filter.SecurityFilter.doFilterSecure(SecurityFilter.java:71)
        	at org.camunda.bpm.webapp.impl.security.filter.SecurityFilter.doFilter(SecurityFilter.java:55)
        	at org.camunda.bpm.spring.boot.starter.webapp.filter.LazyDelegateFilter.doFilter(LazyDelegateFilter.java:60)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        	at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter$1.execute(AuthenticationFilter.java:62)
        	at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter$1.execute(AuthenticationFilter.java:60)
        	at org.camunda.bpm.webapp.impl.security.SecurityActions.runWithAuthentications(SecurityActions.java:44)
        	at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:60)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        	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:193)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        	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:193)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        	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:193)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
        	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
        	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
        	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
        	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
        	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)
        	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        	at java.lang.Thread.run(Thread.java:748)
        

      What is the problem?

      • Error is thrown when I click on message name in "Incidents" tab
      • Incrementing number of retries also does not resolve the issue.

      What would be the expected behavior:

      • Stacktrace page should be open when I click on message name in "Incidents" tab

      Hints (optional):

      • Only reproducible in Oracle database
      • In Oracle, empty string or BLOB is being stored as null.

        This is the controller panel for Smart Panels app

              Unassigned Unassigned
              garima.yadav Garima Yadav
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved: