我有一个用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}&moveFailed=failed/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${file:ext}"/>
<to uri="ftp:{{ftp.server}}{{ftp.subdirectory}}/outbox/<what goes here?>" />
</route>
我可以在本节中提出的任何建议,以实现我想要做的事情,欢迎或建议我如何以稍微不同的方式实现它,但它必须使用驼峰和路线定义必须保留在XML中。
答案 0 :(得分:1)
您可以添加此处理器,在将文件发送到ftp生成器之前使用正则表达式设置fileName
<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);
}
}
<强>更新强> 如果不使用处理器,请尝试添加此
<setHeader headerName="CamelFileName">
<simple>${in.header.CamelFileName.replaceAll("-\d+","")}</simple>
</setHeader>