In this article We will see the issue related while running Munit with Async block inside sub-flows. We will also see why this error normally occurs while running Munit and what are the options to resolve it.

java.lang.IllegalStateException: Couldn’t register an instance of a MessageProcessorChain
at org.mule.runtime.config.internal.LazyMuleArtifactContext.lambda$createBeans$20(LazyMuleArtifactContext.java:399)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.mule.runtime.config.internal.LazyMuleArtifactContext.createBeans(LazyMuleArtifactContext.java:386)

Caused by: org.mule.runtime.core.privileged.registry.RegistrationException: Could not register object for key mule-munit-async-subflow-issueSub_Flow@729342238
Caused by: org.mule.runtime.api.lifecycle.LifecycleException: Failed to invoke lifecycle phase “start” on object: SubFlowMessageProcessorChain ‘mule-munit-async-subflow-issueSub_Flow’ 
  com.mulesoft.mule.runtime.core.internal.processor.TransformMessageProcessor@534ae04a, 
  org.mule.runtime.core.internal.processor.AsyncDelegateMessageProcessor@41cc2f00
]
Caused by: java.lang.NullPointerException
at org.mule.runtime.core.internal.component.ComponentUtils.getFromAnnotatedObject(ComponentUtils.java:37)

Problem Analysis:

As we know sub-flow is synchronous and single threaded in nature. Also Async block every time creates a new thread from running thread to complete the tasks in Async mode. So, in sub-flow scope it should never allow to create a separate thread from the running thread.

async,subflow

Resolution:

Method I: Change sub-flow to private flow
By changing the sub-flow to private flow, you can resolves this issue. As flow supports multi thread execution. So when Async block will called a new thread will be created and registered to its main thread and finishes its execution in Async mode.

async,flow

Method II: Add Try scope on Async scope
Second method is to add Try block on top of Async block to make the execution transactional or running in single thread. So when Munit starts running it will execute and finish its tasks without any issue. 

 async, try, subflow

Which one to choose?

It all depends on your requirement and design. Normally adding try block in sub-flows is a better option if you don’t want to change your existing design.


Happy Learning 🙂

By Manish Kumar

I am having around 10 years of IT experience in Integration Architecture, Requirement gathering, Effort Estimation, Application Design\Development\Testing and Deployment including 5+ years of experience in MuleSoft ESB and Hybrid Integrations. DevOps and Cloud Integration is my area of interest.

2 thoughts on “Munit Issue with Async block inside subflow Mule4 – Resolved”

Leave a Reply

Your email address will not be published. Required fields are marked *