提取FirstSuccessful路由消息处理器中不成功的消息处理器引发的异常

问题描述:

我正在解决如下的故障安全场景。提取FirstSuccessful路由消息处理器中不成功的消息处理器引发的异常

但是在恢复流程中,我无法获取由于subflow1或subflow2失败而发生的异常或exceptionPayload。

有什么办法可以得到第一个成功的路由处理器中不成功的消息处理器抛出的异常。

我已经看过Mule FirstSuccessful类代码。从它的循环中,我可以看到异常被捕获但未保存。

有没有一种方法可以扩展并拥有我自己的第一次成功,这也可以为我提供例外情况?

<flow name="main_flow" > 
    .... 
    .... 
    <first-successful> 
     <flow-ref name="subflow_1" /> 
     <flow-ref name="recoveryFlow1" /> 
    </first-successful> 
    .... 
    .... 
    <first-successful> 
     <flow-ref name="subflow_2" /> 
     <flow-ref name="recoveryFlow2" /> 
    </first-successful> 
    .... 
    .... 
</flow> 

<sub-flow name="subflow_1"> 
    .... 
    .... 
    <out-bound call to web-service /> 
    .... 
    .... 
</sub-flow> 

<sub-flow name="subflow_2"> 
    .... 
    .... 
    <out-bound call to web-service /> 
    .... 
    .... 
</sub-flow> 

<sub-flow name="revoceryFlow1" > 
    <process communication based on the exception thrown by previous unsuccessful sub-flow 1> 
    <some more processing so that the remaining main flow is not impacted because of the failue of the subflow 1 > 
</sub-flow> 

<sub-flow name="revoceryFlow2" > 
    <process communication based on the exception thrown by previous unsuccessful sub-flow 2> 
    <some more processing so that the remaining main flow is not impacted because of the failue of the subflow 2 > 
</sub-flow> 

请指教,如果我走错了方向。有没有比我更好的方法?

我得到了解决方案。 骡子没有直接的解决方案。 我已覆盖FirstSuccessful行为并添加了具有异常详细信息的属性。这些属性然后在第一次成功的内部的下一个消息处理器中被访问。

catch (Exception ex) 
     { 
      event.getMessage().setProperty("prevError", ex.getMessage() , PropertyScope.INVOCATION); 
      event.getMessage().setProperty("prevErrorClass", ex.getClass() , PropertyScope.INVOCATION); 
      failed = true; 
     }