max max - 1 year ago 176
HTTP Question

Mule 3.7 until successful failureExpression not working

I am using until-successful to retry calling a web service only when it is down.

Below is what I have tried:

<until-successful maxRetries="10" failureExpression="#[(message.inboundProperties['http.status'] != 200) &amp;&amp; (message.inboundProperties['http.status'] != 500)]" synchronous="true" millisBetweenRetries="5000">

<flow-ref name="callSubFlow" doc:name="Flow Reference"/>

If I get a HTTP response 500 I also do not want to retry calling the web service. I have mocked a web service and when it returns a HTTP 500 response the until successful keeps retrying calling the web service. What is wrong with the failureExpression above?


max max
Answer Source

Here is how if fixed my issue. I created another flow that catches only the Web Service 500 error. The until -successful then does not retry to call the web service again.

<until-successful maxRetries="${webservice.timeout.max.retries}" failureExpression="#[exception != null &amp;&amp; (exception.causedBy( || exception.causedBy( || exception.causedBy(java.util.concurrent.TimeoutException) || exception.causedBy(]" 
synchronous="true" millisBetweenRetries="5000" >
 <processor-chain doc:name="Processor Chain">

      <set-payload value="#[payLoad]" />
      <flow-ref name="Flow1" />


<flow name="Flow1">
<ws:consumer config-ref="WSConsumerConfig" operation="execute"  />
    <choice-exception-strategy doc:name="Choice Exception Strategy">

      <catch-exception-strategy doc:name="Catch Exception Strategy" when="#[exception != null &amp;&amp; exception.causedBy(]">

        <logger message="SoapFaultException occurred." level="INFO" doc:name="Logger"/>
        <set-payload value="#[exception]" doc:name="Set Payload"></set-payload>