我正在尝试使用属性值动态传递到URI值。该属性值将在cfg文件中配置。
使用CamelFileNameOnly标头提取文件名时,必须将其传递给to Uri端点。因此代码中引用了相同的名称。
请在下面找到我的代码:
我在服务器位置删除了一个名为KevinFile.txt的文件= D:\ Servers \ jboss-fuse-6.2.0.redhat-133 \ data \ myLocalFTP(file:// data / myLocalFTP)
配置文件
local.folder.url=file://data/myLocalFTP
KevinFile=file://data/KevinFileDirectory
骆驼路线
<route id="awsRoute">
<from uri="{{local.folder.url}}"/>
<bean ref="processorClass" method="process"/>
<log message="myProperty value is ${exchangeProperty.myProperty}"/> <---Gives the fileName
<to uri="{{${exchangeProperty.myProperty}}}"/> <--This is the spot i am getting error :(
</route>
ProcessorClass.java
public class ProcessorClass implements Processor{
@Override
public void process(Exchange exchange) throws Exception {
String fileName = (String) exchange.getIn().getHeader("CamelFileNameOnly");
exchange.setProperty("myPropertyNew", fileName);
}
}
答案 0 :(得分:0)
啊你想要的只是将标题设置为属性。你可以这样做:
from("direct:start")
.setHeader("CamelFileNameOnly").simple("{{myPropertyName}}")
.to("file://data/myLocalDisk");
在这种情况下,您还可以使用文件组件上提供的uri语法来简化此操作(感谢Sergii的推荐)。只需确保检查某些组件依赖于交换标头的每个组件的camel文档,而其他组件可以利用URI属性。
from("direct:start")
.to("file://data/myLocalDisk?fileName={{myPropertyName}}");
还值得注意的是,如果在设置标题之前有想要使用的逻辑,则可以让setHeader调用bean。
from("direct:start")
.setHeader("CamelFileNameOnly").bean(MyPropertyLogicBean.class, "someMethod({{myPropertyName}})")
.to("file://data/myLocalDisk");
使用camel属性组件来解析此属性。
答案 1 :(得分:0)
如果我理解正确,你需要为生产者的常量部分指定“动态”vlue。您可以使用recipientList或routingSlip代替<to uri="{{${exchangeProperty.myProperty}}}"/>
:
<recipientList>
<simple>${exchangeProperty.myProperty}</simple>
</recipientList>
或
<routingSlip>
<simple>${exchangeProperty.myProperty}</simple>
</routingSlip>