apache-camel - 如何使用标头值动态写入 Camel 中的不同文件夹?
问题描述
我需要将文件传输到多个目标系统。这些目标系统是在源系统的文件名中定义的。
例如:
SLPNPM_ID0001_T20190329000000.DAT -> target directory : /SLPNPM/
SLPNP1_ID0001_T20190329000001.DAT -> target directory : /SLPNP1/
SLPNP2_ID0002_T20190329000002.DAT -> target directory : /SLPNP2/
... ...
所以,我实现了下面的代码。
CamelContext.xml
<route id="_route1">
<from id="_from1" uri="direct:source"/>
<bean id="_setTarget" ref="setTarget"/>
<to id="_to1" uri="file:C:/{${header.targetNeId}}/outputFolder"/>
</route>
<bean id="setTarget" class="com.ktds.openmzn.sample.SetTarget"/>
设置目标.java
public class SetTarget implements Processor {
Logger logger = LoggerFactory.getLogger(SetTarget.class);
@Override
public void process(Exchange exchange) throws Exception {
String target_neid = exchange.getIn().getHeader("CamelFileName").toString().substring(0, 6);
//SLPNPM_FGIDRO01_ID0001_T20190312000500.DAT
logger.info("Target Ne Id ::: " + target_neid);
exchange.getIn().setHeader("targetNeId", target_neid);
}
}
错误日志
Caused by: java.lang.IllegalArgumentException: Invalid directory: C:/{${header.targetNeId}}/outputFolder. Dynamic expressions with ${ } placeholders is not allowed. Use the fileName option to set the dynamic expression.
at org.apache.camel.component.file.FileComponent.buildFileEndpoint(FileComponent.java:57) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:56) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:38) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:126) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:706) ~[camel-core-2.23.1.jar:2.23.1]
... 39 common frames omitted
如果我想满足我的业务需求,我该如何处理?
解决方案
推荐阅读
- python - 我们如何在列中打印输出
- minizinc - 为一套选择合适的一套
- python - Panda Slicing Notation 有什么更好的
- r - R - 根据日期差异加入两个数据框
- python - 如何在保留时区的同时序列化时间对象?
- tensorflow - RuntimeError:Tensorflow 不支持调整坐标变换模式=pytorch_half_pixel
- flutter - Flutter:位置启用/禁用流侦听器
- api - 如何在 Skype 群组对话中获取非联系成员的姓名?
- docker - 有没有办法在 Kubernetes 部署/pod 定义中给出类路径?
- html - 我无法通过表单向数据库添加数据