Getting started Community Training Tutorials Documentation APIs, AI & Tools
<flow name="catch">
<!-- flow logic -->
<catch-exception-strategy>
<!-- error handling logic -->
</catch-exception-strategy>
</flow>
The following examples will guide you through the migration of the different exception strategies of Mule 3 considering the new error handling components in Mule 4.
The examples do not cover the migration of expressions used within the when attribute.
See Migrating MEL to DataWeave for guidance with migrating expressions,
and see Working With Throwables to use the Java module
to analyze exceptions.
|
A Catch Exception Strategy is equivalent to an Error Handler with a single on-error-continue
component that accepts all errors, which is the default configuration:
<flow name="catch">
<!-- flow logic -->
<catch-exception-strategy>
<!-- error handling logic -->
</catch-exception-strategy>
</flow>
<flow name="catch">
<!-- flow logic -->
<error-handler>
<on-error-continue>
<!-- error handling logic -->
</on-error-continue>
</error-handler>
</flow>
A simple (no redelivery) rollback exception strategy is equivalent to an error
handler with a single on-error-propagate component that accepts all errors,
which is the default configuration:
<flow name="rollback">
<!-- flow logic -->
<rollback-exception-strategy>
<!-- error handling logic -->
</rollback-exception-strategy>
</flow>
<flow name="rollback">
<!-- flow logic -->
<error-handler>
<on-error-propagate>
<!-- error handling logic -->
</on-error-propagate>
</error-handler>
</flow>
idempotent-redelivery-policy gets renamed to redelivery-policy
org.mule.runtime.core.api.exception.MessageRedeliveredException has been replaced by the REDELIVERY_EXHAUSTED error type.
dead-letter-queue is removed. Any outbound operation performed to publish to a DLQ must be done as part of the handling of the REDELIVERY_EXHAUSTED error, for example:
<idempotent-redelivery-policy maxRedeliveryCount="${maxRedeliveryAttempts}">
<dead-letter-queue>
<http:request ... />
</dead-letter-queue>
</idempotent-redelivery-policy>
<redelivery-policy maxRedeliveryCount="${maxRedeliveryAttempts}"/>
...
<error-handler>
<on-error-propagate type="REDELIVERY_EXHAUSTED">
<http:request ... />
</on-error-propagate>
</error-handler>
maxRedelivery in rollback-exception-strategy is not supported anymore. A <redelivery-policy> element with maxRedelivery must be created inside the message-source.
A Choice exception strategy with inner catch/rollback exception strategies is equivalent to an error handler with on-error components continue/propagate according to the exception strategy kind, as explained above:
<flow name="choice">
<!-- flow logic -->
<choice-exception-strategy>
<rollback-exception-strategy when="#[some_expression_here]">
<!-- error handling logic -->
</rollback-exception-strategy>
<catch-exception-strategy/>
</choice-exception-strategy>
</flow>
<flow name="choice">
<!-- flow logic -->
<error-handler>
<on-error-propagate when="#[some_expression_here]">
<!-- error handling logic -->
</on-error-propagate>
<on-error-continue/>
</error-handler>
</flow>
Considering that the referenced exception strategy has already been migrated according
to the above guidelines, migrating the actual reference is just adding a reference error-handler.
<flow name="reference">
<!-- flow logic -->
<exception-strategy ref="referencedHandler"/>
</flow>
<flow name="reference">
<!-- flow logic -->
<error-handler ref="referencedHandler"/>
</flow>