如何捕捉骡子流中smooksTransformer引发的异常?

时间:2013-09-18 06:24:35

标签: spring mule

在mule flow中,我有一个文件入站端点,它读取.edi文件并生成xml文件。 如果在解析edi文件时抛出任何异常,我需要捕获它并向spring控制器发送一个自定义错误消息,从中调用mule流。如何在骡子综合弹簧项目中做到这一点?

以下是我的骡子流程终点:

    <file:inbound-endpoint path="D:\smooks\test docs\in"
        pollingFrequency="3000" responseTimeout="10000" doc:name="Incoming File"
        transformer-refs="SmooksTransformer">
        <file:filename-regex-filter pattern="(.*).edi"
            caseSensitive="false" />
    </file:inbound-endpoint>
    <file:outbound-endpoint path="D:\smooks\test docs\out" responseTimeout="10000" 
        doc:name="Outgoing File" outputPattern="#[header:originalFilename].xml"/>

2 个答案:

答案 0 :(得分:1)

看着你已经分享了你的流量,这个“弹簧控制器,从中称为骡子流”没有意义:没有办法也不需要调用流程文件入站端点是一个轮询器,将定期触发,无需调用它。

因为不会同步调用此流,所以在抛出异常时通知自定义代码位的唯一方法是收听Mule通知。创建一个侦听[org.mule.context.notification.ExceptionNotification][1]并在控制器bean上调用方法的侦听器应该可以正常工作。

启动Mule的方式虽然是一个问题:你在自己的上下文中启动它,因此Mule中定义的bean无法访问现有Spring应用程序上下文中的bean。 This documentation页面解释了如何通过使Mule应用程序上下文成为现有Spring应用程序的子项来解决此问题,这将允许调用控制器。

如果这对你来说太复杂了。这是另一种选择:在流中添加一个异常策略,将错误发送到单向VM队列,让Spring控制器使用muleClient bean定期轮询该VM队列的内容(request() })。这样,您就可以将错误带回主Spring环境中。

答案 1 :(得分:0)

您需要导入具有控制器bean的spring配置,并在流程中使用自定义异常策略将详细信息传递给控制器​​,如:

<spring:ref bean="Controller" />