2

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

以下是我的骡流端点:

    <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"/>
4

2 回答 2

1

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

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

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

如果这对你来说太复杂了。这是另一种选择:在流程中添加异常策略,将错误发送到单向 VM 队列,并让 Spring 控制器使用muleClientbean 定期轮询此 VM 队列的内容(使用request())。这样,您将把错误带回到您的主要 Spring 上下文中。

于 2013-09-18T19:50:28.540 回答
0

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

<spring:ref bean="Controller" />
于 2013-09-18T07:31:45.790 回答