Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ExpressionEvaluationRequestHandlerAdvice将负载推送到远程服务器后无法删除负载_Java_Spring_Spring Integration_Spring Integration File - Fatal编程技术网

Java 使用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

我正在尝试使用ExpressionEvaluationRequestHandlerAdvice删除已推送到远程服务器的源文件:

    @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;
    }
和my
Transformer
类:


@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()