【问题标题】:How can I strip out part of a filename in camel XML route如何在骆驼 XML 路由中删除部分文件名
【发布时间】:2019-10-31 14:00:09
【问题描述】:

我有一个用 XML 定义的骆驼路由,它以 AB1234-20141113.txt 格式提取文件并将它们移动到 ftp 服务器。我需要重命名路由中的文件,去掉 - 和 .txt 之间的日期部分,以便 ftp 服务器上的文件为 AB1234.txt。

从下面的示例路由定义中可以看出,我在成功或失败后在本地计算机上移动文件时使用了 from uri 中的文件表达式语言来添加文件名,但我看不到任何简单的方法在 ftp uri 中应用正则表达式或子字符串转换。

<route id="outboundoFtpPoller">
    <from uri="file:/generatedFiles?move=done/${date:now:yyyyMMdd}/${file:name}&amp;moveFailed=failed/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${file:ext}"/>
    <to uri="ftp:{{ftp.server}}{{ftp.subdirectory}}/outbox/<what goes here?>" />
</route>

欢迎任何关于我可以在该部分中提出什么以实现我正在尝试做的事情的建议,或者任何关于我如何以稍微不同的方式实现它的建议,但它必须使用骆驼并且路线定义必须保留在 XML 中。

【问题讨论】:

    标签: regex apache-camel


    【解决方案1】:

    您可以添加这个处理器,在将文件发送到 ftp 生产者之前使用正则表达式设置文件名

    <route id="outboundoFtpPoller">
        <from uri="file:/generatedFiles?move=done/${date:now:yyyyMMdd}/${file:name}&amp;moveFailed=failed/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${file:ext}"/>
        <bean id="myProcessor" class="mypackage.MyProcessor"/>
        <to uri="ftp:{{ftp.server}}{{ftp.subdirectory}}/outbox/<what goes here?>" />
    </route>
    

    我的处理器在哪里

    public class MyProcessor implements Processor {
        @Override
        public void process(Exchange exchange) throws Exception {
            String fileName = exchange.getIn().getHeader(Exchange.FILE_NAME_ONLY, String.class).replaceAll("-\\d+", "");
            exchange.getIn().setHeader(Exchange.FILE_NAME,fileName);
        }
    }
    

    更新 不使用处理器尝试添加这个

      <setHeader headerName="CamelFileName">
                <simple>${in.header.CamelFileName.replaceAll("-\d+","")}</simple>
            </setHeader>
    

    【讨论】:

    • 谢谢Itsallas 我得出的结论是这可能是唯一的方法,但是我希望能够以某种方式使用正则表达式或脚本内联,这样我就不会每次我有不同的文件名格式或重命名要求时,都需要创建或定义一个新的 bean 实例,但您的解决方案肯定能满足我的需要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2018-02-17
    • 2018-05-28
    相关资源
    最近更新 更多