如何在camel XML路由中删除部分文件名

时间:2014-10-29 09:59:10

标签: regex apache-camel

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

从下面的示例路由定义中可以看出,在成功或失败后在本地计算机上移动文件时,我使用了来自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中。

1 个答案:

答案 0 :(得分:1)

您可以添加此处理器,在将文件发送到ftp生成器之前使用正则表达式设置fileName

<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>