为camel recipientList聚合器使用脚本语言

时间:2015-02-06 20:57:51

标签: xml apache-camel

我正在使用Camel开发一个项目,由于各种原因,如果我们避免任何Java代码会更好。不要问......!

目前我正在使用一个带有小聚合器的recipentList,它只是将消息连接在一起,所以有几行。但我试图找出是否可以在没有这些行的情况下将活动移动到路径定义中。

到目前为止我已经

<bean id="docGenAggregator" class="local.dev.scatterGather.DocGenAggregator">
....
<recipientList 
        strategyRef="docGenAggregator" 
        strategyMethodName="docGenRequest">
  <header>documentPartsList</header>
</recipientList>

工作正常。在这种情况下,recipientList实际上是xslt:...端点的列表,每个端点返回xml,我只想要所有返回的xml的串联。

我的豆子目前正在

package local.dev.scatterGather;

public class DocGenAggregator {

    public String docGenRequest(String existing, String next) {
        return existing + next; 
    }

}

使用脚本的例子(不关心语言,我已经在这方面陡峭的学习曲线,所以多一点不会真正有所作为!)

由于

1 个答案:

答案 0 :(得分:3)

是的,您可以使用内联的groovy脚本来执行此操作。我在Apache Camel中创建了一个单元测试来演示这个。

  <!-- inline a groovy script to use for the aggregator -->
  <lang:groovy id="myAggregate">
    <lang:inline-script>
      class MyAggregate {
        String someNameHere(String prev, int next) {
          return prev * next
        }
      }
    </lang:inline-script>
  </lang:groovy>

然后从聚合中你需要告诉方法名称使用,因为groovy类有一些额外的方法Camel默认不跳过

  <!-- we must declare the name of the method, as the inlined groovy script has additional methods -->
  <aggregate strategyRef="myAggregate"
             strategyMethodName="someNameHere"
             completionSize="2">

完整示例位于此提交中:https://github.com/apache/camel/commit/1c7a2d749e5f75545aa9899e9b06cdef4cf1d614