Java 使用ExpressionEvaluationRequestHandlerAdvice将负载推送到远程服务器后无法删除负载
我正在尝试使用ExpressionEvaluationRequestHandlerAdvice删除已推送到远程服务器的源文件:Java 使用ExpressionEvaluationRequestHandlerAdvice将负载推送到远程服务器后无法删除负载,java,spring,spring-integration,spring-integration-file,Java,Spring,Spring Integration,Spring Integration File,我正在尝试使用ExpressionEvaluationRequestHandlerAdvice删除已推送到远程服务器的源文件: @Bean public Advice expressionAdvice(GenericEndpointSpec<FileTransferringMessageHandler<ChannelSftp.LsEntry>> c) { ExpressionEvaluatingRequestHandlerAdvice ad
@Bean
public Advice expressionAdvice(GenericEndpointSpec<FileTransferringMessageHandler<ChannelSftp.LsEntry>> c) {
ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
advice.setOnSuccessExpressionString("payload.delete()");
advice.setOnFailureExpressionString("payload + ' failed to upload'");
advice.setTrapException(true);
return advice;
}
和myTransformer
类:
@Component
public class Transformer {
public String transform(String filePath) throws IOException {
String content = new String(Files.readAllBytes(Paths.get(filePath)));
return "Transformed content: " + content;
}
}
但是,当我检查源目录时,文件仍然存在。
我错过了什么?请帮忙
我使用的是SpringIntegration5.2.4
提前谢谢
以下是基于@ArtemBilan答案的工作代码:
@Bean
public Advice expressionAdvice(GenericEndpointSpec<FileTransferringMessageHandler<ChannelSftp.LsEntry>> c) {
ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
// advice.setOnSuccessExpressionString("payload.delete()");
advice.setOnSuccessExpressionString("headers[file_originalFile].delete()");
advice.setOnFailureExpressionString("payload + ' failed to upload'");
advice.setTrapException(true);
return advice;
}
@豆子
公共建议表达建议(一般性建议点规范c){
ExpressionEvaluationRequestHandlerAdvice通知=新的ExpressionEvaluationRequestHandlerAdvice();
//advice.setOnSuccessExpressionString(“payload.delete()”);
advice.setOnSuccessExpressionString(“头文件[原始文件].delete()”;
advice.setOnFailureExpressionString(“有效负载+‘未能上传’”);
建议.setTrapException(真);
回信;
}
再来一次:
public String transform(String filePath) throws IOException {
String content = new String(Files.readAllBytes(Paths.get(filePath)));
return "Transformed content: " + content;
}
因此,您的.transform(transformer,“transform”)
生成的是字符串,而不是文件。这对于Sftp.outboundAdapter()
是可以的,因为它能够将该字符串转换为远程文件内容。但是,advice.setOnSuccessExpressionString(“payload.delete()”)是什么代码>应该为字符串对象执行什么操作?我相信你想删除一个文件,所以你需要有一个确切的file
对象,这个建议才能正常工作
FileReadingMessageSource
为我们填充一个FileHeaders.ORIGINAL_文件头。
因此,可以将要删除的表达式更改为:
headers[file_originalFile].delete()
您应该没事。我们需要看看您是如何准备好文件的。那是什么fileReader()
。还有你的.transform(transformer,“transform”)
所做的。人们在删除flie资源之前忘记关闭它是一个典型的问题。在大多数情况下,它发生在Windows上。请确认您正在做什么。]在上面添加了我的fileReader
bean和Transformer
类。顺便说一句,我正在mac电脑上开发。提前感谢@ArtemBilan!它现在正在按预期工作。非常感谢@ArtemBilan!
headers[file_originalFile].delete()