基于文件名/ cfg文件/属性名称的动态URI

时间:2016-05-12 07:46:21

标签: web-services java-ee apache-camel camel-ftp

我正在尝试使用属性值动态传递到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); 

        } 
} 

2 个答案:

答案 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属性组件来解析此属性。

参考:http://camel.apache.org/properties.html

答案 1 :(得分:0)

如果我理解正确,你需要为生产者的常量部分指定“动态”vlue。您可以使用recipientList或routingSlip代替<to uri="{{${exchangeProperty.myProperty}}}"/>

<recipientList>
    <simple>${exchangeProperty.myProperty}</simple>
</recipientList>

<routingSlip>
    <simple>${exchangeProperty.myProperty}</simple>
</routingSlip>