如何在骆驼XML路径中删除一部分文件名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在骆驼XML路径中删除一部分文件名相关的知识,希望对你有一定的参考价值。
我有一个用XML定义的骆驼路线,该路线会拾取AB1234-20141113.txt格式的文件,并将其移动到ftp服务器。我需要重命名路由中的文件,以去除-和.txt之间的日期部分,以便ftp服务器上的文件为AB1234.txt。
您可以从下面的示例路由定义中看到,成功或失败后,在本地计算机上移动文件时,我已使用from uri中的File Expression语言将其添加到文件名中,但是我看不到任何简单的应用方法在ftp uri中使用正则表达式或子字符串转换。
<route id="outboundoFtpPoller">
<from uri="file:/generatedFiles?move=done/${date:now:yyyyMMdd}/${file:name}&moveFailed=failed/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${file:ext}"/>
<to uri="ftp:{{ftp.server}}{{ftp.subdirectory}}/outbox/<what goes here?>" />
</route>
欢迎提供有关本节中要实现的目标的任何建议,或者有关如何以略有不同的方式实现目标的任何建议,但必须使用骆驼,并且必须保留路线定义在XML中。
答案
您可以添加此处理器,该处理器使用正则表达式设置文件名,然后再将文件发送到ftp生产者
<route id="outboundoFtpPoller">
<from uri="file:/generatedFiles?move=done/${date:now:yyyyMMdd}/${file:name}&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);
}
}
UPDATE不使用处理器,请尝试添加此]
<setHeader headerName="CamelFileName">
<simple>${in.header.CamelFileName.replaceAll("-d+","")}</simple>
</setHeader>
另一答案
@@ ltsallas如何在不使用处理器的情况下将
以上是关于如何在骆驼XML路径中删除一部分文件名的主要内容,如果未能解决你的问题,请参考以下文章