0

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

处理器类.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); 

        } 
} 
4

2 回答 2

0

啊,您要寻找的只是将标头设置为属性。你可以这样做:

from("direct:start")
    .setHeader("CamelFileNameOnly").simple("{{myPropertyName}}")
    .to("file://data/myLocalDisk");

在这种情况下,您还可以通过使用文件组件上可用的 uri 语法来简化此操作(感谢 Sergii 的建议)。只需确保检查每个组件的骆驼文档,某些组件依赖于交换标头,而其他组件可以利用 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");

使用骆驼属性组件来获取此属性以进行解析。

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

于 2016-05-18T17:31:00.077 回答
0

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

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

或者

<routingSlip>
    <simple>${exchangeProperty.myProperty}</simple>
</routingSlip>
于 2016-05-18T19:52:21.317 回答