如何处理弹簧集成的同步通道中的异常

时间:2015-01-03 09:17:14

标签: spring-integration

我有以下配置

       <int:channel id="ftpChannel"/> 
<int-ftp:inbound-channel-adapter id="ftpInbound"
    channel="ftpChannel"
    session-factory="ftpClientFactory"
    charset="UTF-8"
    local-directory="file:${paths.root}"
    delete-remote-files="true"
    temporary-file-suffix=".writing"
    remote-directory="${file.ftpfolder}"

    filter="compositeFilterRemote"
     preserve-timestamp="true"
     auto-startup="true">
    <int:poller fixed-rate="1000"/>
</int-ftp:inbound-channel-adapter>
<int-ftp:outbound-channel-adapter id="ftpOutbound"
    channel="ftpChannel"
    session-factory="ftpClientFactory"
    charset="UTF-8"
    remote-file-separator="/"
    auto-create-directory="true"
    remote-directory="${file.ftpfolder}" 
    use-temporary-file-name="true"
     temporary-file-suffix=".writing">
    <int-ftp:request-handler-advice-chain>
         <bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
            <property name="onSuccessExpression" value="payload.delete()" />
          </bean>
    </int-ftp:request-handler-advice-chain>
  </int-ftp:outbound-channel-adapter>

我想为此添加错误处理。我该怎么办呢?这是一个直接通道,因此在同一个线程中运行。如果我从我的代码中抛出异常,例如在自定义文件过滤器中,我可以在哪里捕获它并返回统一响应。我还能做些什么来捕获运行时异常?

由于

1 个答案:

答案 0 :(得分:1)

向入站适配器的error-channel添加<poller/>,并在发生异常时向该频道发送ErrorMessage

如果在创建消息之前发生异常(例如在过滤器中),则有效负载将是原始异常。如果在创建和处理消息之后发生异常(例如,在您的情况下出站适配器中出现错误),则有效负载为MessagingException,具有failedMessagecause属性。