Skip to content

Application update approval workflow fails on a Multi DC setup with Oracle DB #4951

@IsuruGunarathne

Description

@IsuruGunarathne

Description

When the default workflow approval is setup on a multi DC deployment against oracle DB, the update workflow fails with the following error:

Image

logs:

TID: [-1234] Tenant: [carbon.super] [2026-04-16 09:46:27,866] [2f784591-8378-4213-9dca-0c1b4cd34300] : apim-acp : ERROR {org.wso2.carbon.apimgt.rest.api.util.exception.GlobalThrowableMapper} - An unknown exception has been captured by the global exception mapper. java.lang.NullPointerException: Cannot invoke "Object.toString()" because the return value of "org.json.simple.JSONObject.get(Object)" is null|	at org.wso2.carbon.apimgt.api.dto.WorkflowDTO.getMetadata(WorkflowDTO.java:169) ~[org.wso2.carbon.apimgt.api_9.33.87.jar:?]|	at org.wso2.carbon.apimgt.impl.workflow.ApplicationUpdateApprovalWorkflowExecutor.complete_aroundBody6(ApplicationUpdateApprovalWorkflowExecutor.java:223) ~[org.wso2.carbon.apimgt.impl_9.33.87.jar:?]|	at org.wso2.carbon.apimgt.impl.workflow.ApplicationUpdateApprovalWorkflowExecutor.complete(ApplicationUpdateApprovalWorkflowExecutor.java:1) ~[org.wso2.carbon.apimgt.impl_9.33.87.jar:?]|	at org.wso2.carbon.apimgt.rest.api.admin.v1.impl.WorkflowsApiServiceImpl.workflowsUpdateWorkflowStatusPost(WorkflowsApiServiceImpl.java:224) ~[?:?]|	at org.wso2.carbon.apimgt.rest.api.admin.v1.WorkflowsApi.workflowsUpdateWorkflowStatusPost(WorkflowsApi.java:94) ~[?:?]|	at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[?:?]|	at java.lang.reflect.Method.invoke(Method.java:565) ~[?:?]|	at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:179) ~[?:?]|	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) ~[?:?]|	at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:201) ~[?:?]|	at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:104) ~[?:?]|	at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59) ~[?:?]|	at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96) ~[?:?]|	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) ~[?:?]|	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) ~[?:?]|	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267) ~[?:?]|	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) ~[?:?]|	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) ~[?:?]|	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) ~[?:?]|	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:225) ~[?:?]|	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:304) ~[?:?]|	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:217) ~[?:?]|	at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[tomcat-servlet-api-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:279) ~[?:?]|	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:197) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:88) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:83) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.wso2.carbon.identity.context.rewrite.valve.TenantContextRewriteValve.invoke(TenantContextRewriteValve.java:119) ~[org.wso2.carbon.identity.context.rewrite.valve_1.11.0.jar:?]|	at org.wso2.carbon.identity.context.rewrite.valve.OrganizationContextRewriteValve.invoke(OrganizationContextRewriteValve.java:115) ~[org.wso2.carbon.identity.context.rewrite.valve_1.11.0.jar:?]|	at org.wso2.carbon.tomcat.ext.valves.SameSiteCookieValve.invoke(SameSiteCookieValve.java:38) ~[org.wso2.carbon.tomcat.ext_4.11.12.jar:?]|	at org.wso2.carbon.identity.authz.valve.AuthorizationValve.invoke(AuthorizationValve.java:167) ~[org.wso2.carbon.identity.authz.valve_1.11.0.jar:?]|	at org.wso2.carbon.identity.auth.valve.AuthenticationValve.invoke(AuthenticationValve.java:119) ~[org.wso2.carbon.identity.auth.valve_1.11.0.jar:?]|	at org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:105) ~[org.wso2.carbon.tomcat.ext_4.11.12.jar:?]|	at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:49) ~[org.wso2.carbon.tomcat.ext_4.11.12.jar:?]|	at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:68) ~[org.wso2.carbon.tomcat.ext_4.11.12.jar:?]|	at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:152) ~[org.wso2.carbon.tomcat.ext_4.11.12.jar:?]|	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:643) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:63) ~[org.wso2.carbon.tomcat.ext_4.11.12.jar:?]|	at org.wso2.carbon.tomcat.ext.valves.RequestCorrelationIdValve.invoke(RequestCorrelationIdValve.java:137) ~[org.wso2.carbon.tomcat.ext_4.11.12.jar:?]|	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:72) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:939) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1831) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:973) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:491) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-jdk21_9.0.113.wso2v1.jar:?]|	at java.lang.Thread.run(Thread.java:1474) [?:?]|

after this error application is shown as UPDATE PENDING in dev portal

Image

but is not visible in admin portal

Image

Steps to Reproduce

  1. Update /_system/governance/apimgt/applicationdata/workflow-extensions.xml as per the following documents:
    1. https://apim.docs.wso2.com/en/4.7.0/api-developer-portal/manage-application/advanced-topics/adding-an-application-creation-workflow/
    2. https://apim.docs.wso2.com/en/4.7.0/api-developer-portal/manage-application/advanced-topics/adding-an-application-update-workflow/
    3. https://apim.docs.wso2.com/en/4.7.0/api-developer-portal/manage-application/advanced-topics/adding-an-application-key-generation-workflow/
  2. Go to dev portal
  3. Create application
  4. Go to Admin portal → Application Creation -> Click Approve → success
  5. Go to dev portal → select the application you created → Production keys → Generate keys
  6. Admin portal → Application Registration → Click Approve → success
  7. Dev portal → edit the application and change name or quota (or both) and click save
  8. Admin portal → Application update → Click Approve -> failure

Version

4.7.0-beta

Environment Details (with versions)

  • Multi DC setup of APIM 4.7.0-beta
  • Oracle Database Version 23.26.1.0.0
  • Oracle GoldenGate 23.26.1.0.6

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions