Hello,
I’m trying to develop a business process to manage Purchase Quotations / Purchase Orders. The first step would be to automatically make the purchase quotation requested. My business process is defined as follows:
Request:
Connector:
BPM:
I create a Request Qotation, fill some data then press Save. I get a NullPointerException with the following stack trace:
2025-10-13 09:01:09.570 DEBUG 10842 — [nio-8000-exec-8] c.a.s.b.s.e.WkfInstanceServiceImpl : Start instance for the model: com.axelor.apps.purchase.db.PurchaseOrder, id: 318
2025-10-13 09:01:09.572 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.service.WkfCommonServiceImpl : Process variables: {purchaseOrderId=Value ‹ 318 › of type ‹ PrimitiveValueType[long] ›, isTransient=false, purchaseOrder=ObjectValue [value=com.axelor.utils.context.FullContext@4a8d7c9, isDeserialized=true, serializationDataFormat=application/json, objectTypeName=null, serializedValue=null, isTransient=true]}
2025-10-13 09:01:09.577 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.listener.WkfExecutionListener : Process called with related wkfInstance: null
2025-10-13 09:01:09.591 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.listener.WkfExecutionListener : Task config searched with taskId: Activity_1858ivt, processInstanceId: 327598, found:WkfTaskConfig{id=4, name=Activity_1858ivt, expression=$ctx.find(‹ PurchaseOrder ›, purchaseOrderId)?.createdOn != null, createTask=false, notificationEmail=false}
2025-10-13 09:01:09.618 DEBUG 10842 — [nio-8000-exec-8] c.a.s.b.s.e.WkfInstanceServiceImpl : Model process instanceId added: 327598
2025-10-13 09:01:09.639 DEBUG 10842 — [nio-8000-exec-8] c.a.s.b.s.execution.WkfTaskServiceImpl : Variable map used: {purchaseOrder=com.axelor.utils.context.FullContext@12425e33}
2025-10-13 09:01:09.642 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.service.WkfCommonServiceImpl : Process variables: {purchaseOrderId=Value ‹ 318 › of type ‹ PrimitiveValueType[long] ›, isTransient=false, purchaseOrder=ObjectValue [value=com.axelor.utils.context.FullContext@12425e33, isDeserialized=true, serializationDataFormat=application/json, objectTypeName=null, serializedValue=null, isTransient=true]}
2025-10-13 09:01:09.644 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.service.WkfCommonServiceImpl : Process variables: {}
2025-10-13 09:01:09.724 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.service.WkfCommonServiceImpl : Eval expr: $ctx.find(‹ PurchaseOrder ›, purchaseOrderId)?.createdOn != null, result: true
2025-10-13 09:01:09.724 DEBUG 10842 — [nio-8000-exec-8] c.a.s.b.s.execution.WkfTaskServiceImpl : Valid expr: $ctx.find(‹ PurchaseOrder ›, purchaseOrderId)?.createdOn != null
2025-10-13 09:01:09.745 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.listener.WkfExecutionListener : Task config searched with taskId: Activity_1858ivt, processInstanceId: 327598, found:WkfTaskConfig{id=4, name=Activity_1858ivt, expression=$ctx.find(‹ PurchaseOrder ›, purchaseOrderId)?.createdOn != null, createTask=false, notificationEmail=false}
2025-10-13 09:01:10.005 DEBUG 10842 — [nio-8000-exec-8] c.a.s.service.ws.WsConnectoServiceImpl : URL: http://ubuntu.mshome.net:8000/axelor-erp-latest/ws/action
2025-10-13 09:01:10.021 DEBUG 10842 — [nio-8000-exec-1] c.a.meta.schema.actions.ActionGroup : action: action-purchase-order-method-requested
2025-10-13 09:01:10.046 ERROR 10842 — [nio-8000-exec-1] c.a.a.b.s.exception.TraceBackService : java.lang.NullPointerException
at com.axelor.apps.purchase.service.PurchaseOrderServiceImpl.requestPurchaseOrder(PurchaseOrderServiceImpl.java:319)
at com.axelor.apps.supplychain.service.PurchaseOrderServiceSupplychainImpl.requestPurchaseOrder(PurchaseOrderServiceSupplychainImpl.java:311)
at com.google.inject.persist.jpa.JpaLocalTxnInterceptor.invoke(JpaLocalTxnInterceptor.java:64)
at com.axelor.apps.purchase.web.PurchaseOrderController.requestPurchaseOrder(PurchaseOrderController.java:170)
at com.axelor.apps.base.module.ControllerMethodInterceptor.invoke(ControllerMethodInterceptor.java:36)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.axelor.meta.ActionHandler.call(ActionHandler.java:247)
at com.axelor.meta.schema.actions.ActionMethod.evaluate(ActionMethod.java:77)
at com.axelor.meta.schema.actions.Action.execute(Action.java:101)
at com.axelor.meta.schema.actions.Action.wrap(Action.java:114)
at com.axelor.meta.schema.actions.ActionGroup.evaluate(ActionGroup.java:236)
at com.axelor.meta.schema.actions.Action.execute(Action.java:97)
at com.axelor.meta.schema.actions.Action.wrap(Action.java:114)
at com.axelor.meta.ActionHandler.execute(ActionHandler.java:516)
at com.axelor.meta.ActionExecutor.execute(ActionExecutor.java:58)
at com.axelor.rpc.ResponseInterceptor.invoke(ResponseInterceptor.java:61)
at com.axelor.web.service.ActionService.execute(ActionService.java:79)
at com.axelor.rpc.RequestFilter.invoke(RequestFilter.java:56)
at com.axelor.rpc.ResponseInterceptor.invoke(ResponseInterceptor.java:70)
at jdk.internal.reflect.GeneratedMethodAccessor684.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:170)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:130)
at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:660)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:524)
at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:474)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:476)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:434)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:408)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:69)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:492)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:261)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:161)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:164)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:247)
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:249)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:60)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:89)
at com.axelor.db.tenants.AbstractTenantFilter.doFilter(AbstractTenantFilter.java:71)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at org.apache.shiro.guice.web.SimpleFilterChain.doFilter(SimpleFilterChain.java:44)
at io.buji.pac4j.filter.SecurityFilter.lambda$doFilter$1(SecurityFilter.java:79)
at org.pac4j.core.engine.DefaultSecurityLogic.perform(DefaultSecurityLogic.java:140)
at com.axelor.auth.pac4j.AxelorSecurityLogic.perform(AxelorSecurityLogic.java:82)
at io.buji.pac4j.filter.SecurityFilter.doFilter(SecurityFilter.java:77)
at org.apache.shiro.guice.web.SimpleFilterChain.doFilter(SimpleFilterChain.java:41)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.apache.shiro.guice.web.SimpleFilterChain.doFilter(SimpleFilterChain.java:41)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.axelor.app.internal.AppFilter.doFilter(AppFilter.java:88)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.inject.persist.PersistFilter.doFilter(PersistFilter.java:94)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.axelor.db.tenants.AbstractTenantFilter.doFilter(AbstractTenantFilter.java:71)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.axelor.web.servlet.CorsFilter.doFilter(CorsFilter.java:138)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.axelor.web.servlet.ProxyFilter.doFilter(ProxyFilter.java:44)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:121)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:133)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:673)
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:390)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:829)
2025-10-13 09:01:10.062 DEBUG 10842 — [nio-8000-exec-8] c.a.s.service.ws.WsConnectoServiceImpl : Request1: {status=0, data=[{info={message=java.lang.NullPointerException}}]}
2025-10-13 09:01:10.066 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.listener.WkfExecutionListener : Task config searched with taskId: Event_0vm0vd9, processInstanceId: 327598, found:WkfTaskConfig{id=2, name=Event_0vm0vd9, createTask=false, notificationEmail=false}
2025-10-13 09:01:10.068 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.listener.WkfExecutionListener : Task config searched with taskId: Event_0vm0vd9, processInstanceId: 327598, found:WkfTaskConfig{id=2, name=Event_0vm0vd9, createTask=false, notificationEmail=false}
2025-10-13 09:01:10.071 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.listener.WkfExecutionListener : Task config searched with taskId: Event_0vm0vd9, processInstanceId: 327598, found:WkfTaskConfig{id=2, name=Event_0vm0vd9, createTask=false, notificationEmail=false}
2025-10-13 09:01:10.132 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.service.WkfDisplayServiceImpl : Display wkf nodes of processInstanceId: 327598
2025-10-13 09:01:10.135 DEBUG 10842 — [nio-8000-exec-8] c.a.s.bpm.service.WkfDisplayServiceImpl : Is valid model to display wkf nodes : false
2025-10-13 09:01:10.159 DEBUG 10842 — [io-8000-exec-10] c.a.s.bpm.service.WkfDisplayServiceImpl : Display wkf nodes of processInstanceId: 327598
2025-10-13 09:01:10.161 DEBUG 10842 — [io-8000-exec-10] c.a.s.bpm.service.WkfDisplayServiceImpl : Is valid model to display wkf nodes : false
Does anyones see any problem in my business process defintion and how to get it right?
Thank you,
Marius


















