我希望能够在将文件上传到sftp服务器时捕获int-sftp:outbound-channel-adapter
引发的任何异常。我希望通过简单地指定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错误的更合适(和功能)方式。
答案 0 :(得分:0)
您需要展示启动流程的内容。即发布到input
的内容,通常这是某种门户。
通常,您会在该组件上放置error-channel
并处理错误流中的异常 - 消息为ErrorMessage
,其中包含cause
和failedMessage
属性。< / p>