未为 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
并在那里处理错误流中的异常 - 消息是具有 cause
和 failedMessage
属性的 ErrorMessage
.
我希望能够捕获 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
并在那里处理错误流中的异常 - 消息是具有 cause
和 failedMessage
属性的 ErrorMessage
.