Camel中的SFTP会为文件填充错误的父文件夹

时间:2016-11-08 08:58:25

标签: apache-camel

使用轮询远程文件夹查找文件的Camel SFTP使用者,我有以下端点配置:

sftp://user@server:22\
    ?password=xxx\
    &delete=false\
    &move=.done\
    &localWorkDirectory=/tmp\
    &delay=60000

\是将结束行包裹在yaml中,它们都被拼接在一行上。)

使用此设置从用户的主目录下载文件时,它会尝试将远程文件移动到.done目录(根据Camel文档,“。done”应该足够了)。但是,我得到例外:

org.apache.camel.component.file.GenericFileOperationFailedException - 
    Cannot create directory: /.done (could be because of denied permissions)

我拥有权限,因为我可以创建目录并使用bash中的交互式sftp命令手动重命名文件。

我已经通过Camel的处理进行了调试,发现文件的父文件夹(CamelFileParent标头)被评估为"/",这意味着重命名文件的最终路径被评估为"//.done/some-file-name.csv"。当然,这是错误的,并且由于上述异常而失败。

问题是为什么它无法解析主目录?当我尝试在交互式sftp命令中运行pwd时,它会正确解析为"/home/user"

经过多次调试后,我发现camel是如何解析父文件夹路径的,它完全基于File类,并且它不会在远程服务器上查询父文件夹:

        String name = getRelativeFilePath();
        File path;
        if (name != null) {
            path = new File(endpointPath, name);
        } else {
            path = new File(endpointPath);
        }
        parent = path.getParent();

其中endpointPath""name"some-file-name.csv",因此getParent()调用已解析为"/"

如何才能获得正确的主路径(实际上不会将路径硬编码到端点配置中)?这是一个错误吗?

0 个答案:

没有答案