未为 sftp 出站适配器调用错误处理程序

Error handler not being invoked for sftp outbound adapter

我希望能够捕获 int-sftp:outbound-channel-adapter 在将文件上传到 sftp 服务器时抛出的任何异常。我期望通过简单地指定 int:service-activator 来使用 errorChannel 作为输入,我将能够捕获我的 sftp 集成流程抛出的所有异常。事实似乎并非如此。我正在通过尝试写入我无权访问的路径来模拟异常,并且异常被抛出但没有传递给服务激活器。

<int:channel id="input" />

<int-sftp:outbound-channel-adapter
    session-factory="sftpSessionFactory" channel="input"
    remote-directory-expression="headers['remote_dir']"
    remote-filename-generator-expression="headers['remote_file_name']" />

<int:service-activator input-channel="errorChannel">
    <bean
        class="...ErrorHandler" />
</int:service-activator>

org.springframework.messaging.MessageDeliveryException: Error handling message for file [String payload -> sftp.txt]; nested exception is org.springframework.messaging.MessagingException: Failed to write to '/sftp.txt.writing' while uploading the file; nested exception is org.springframework.core.NestedIOException: failed to write file; nested exception is 3: Permission denied

我还注意到有些人正在使用 sftp:request-handler-advice-chain 来处理错误。这是处理 sftp 错误的更合适(和更实用)的方法吗?

您需要展示是什么启动了您的流程。即发布到 input 的内容,通常是某种网关。

通常,您会在该组件上放置一个 error-channel 并在那里处理错误流中的异常 - 消息是具有 causefailedMessage 属性的 ErrorMessage .