2013-12-19 54 views
0

我有以下骆驼路线:Apache的骆驼:的setProperty和Groovy

<route id="myroute"> 
    <from uri="timer://runOnce?repeatCount=1&amp;delay=10" /> 

    <!-- Set a new property on the exchange. --> 
    <to uri="bean:propSetter?method=setProp" /> 

    <to uri="direct:fizz" /> 
</route> 

PropSetter豆:

public class PropSetter { 
    // Add new "buzz" ArrayList<Long> to the exchange. 
    public void setProp(Exchange exchange) { 
     exchange.setProperty("buzz", new ArrayList<Long>()); 
    } 
} 

我想改写这个没有一个Java bean,而是使用骆驼的<setProperty/>元件。我可以想到的唯一的事情是使用内置的Groovy表达:

<route id="myroute"> 
    <from uri="timer://runOnce?repeatCount=1&amp;delay=10" /> 

    <!-- Set a new property on the exchange. --> 
    <setProperty propertyName="buzz"> 
     <groovy>new ArrayList&lt;Long&gt;();</groovy> 
    </setProperty> 

    <to uri="direct:fizz" /> 
</route> 

但这似乎并没有工作。那么如何使用XML在名为buzz的交易所上设置新的ArrayList<Long>

+1

你是什么意思_“做似乎没有工作“_? –

+1

您可以引用一个bean,并在该bean内部指定一个列表。 – Ashish

+0

谢谢@tim_yates(+1) - 虽然我无法破译你是否需要我澄清我看到的错误的程度,或者如果你认为它*应该*工作并且不明白为什么它不...你介意一点点介绍吗?再次感谢! – IAmYourFaja

回答

0

使用Spring的UTIL命名空间中定义的列表:

<util:list id="myList" value-type="java.lang.String"> 
</util:list> 

然后用简单的语言,你可以访问bean并在交换属性设置

<camel:setProperty propertyName="buzz"> 
    <camel:simple>${bean:myList}</camel:simple> 
</camel:setProperty> 
+0

您应该在util:列表上设置scope =“prototype”,以便创建一个新列表,否则使用相同的共享实例 –