具有correlationExpression的Camel聚合器

时间:2013-11-18 14:21:35

标签: java apache-camel aggregate eip

我有一个用camel 2.10.6编写的应用程序,它使用EIP aggregator。它接收2个文件:一个以-information结尾,另一个以-report结尾。我必须处理这两个文件(单独处理),处理后我必须组合(即aggregate)。

为实现这一目标,我使用的是EIP aggregator。 我已经使用spring DSL定义了路由。我没有相关表达式。也就是说,我的表达式是常量true

        <route>
        <from uri="activemq:assemblingAll" />
        <log message="\n---------->>> @ASSEMBLEALL" />

        <aggregate strategyRef="myAggregator" completionSize="2">
            <correlationExpression>
                <constant>true</constant>
            </correlationExpression>

            <to uri="activemq:toBeValidated" />
        </aggregate>
    </route>

我想关联属于一起的文件,即带有相同前缀的文件(前缀是之前的字符串 { {1}}(分别为-information)。我相信通过在标题中设置一些ID也可以做到这一点。

我的问题是我不知道该怎么做。到目前为止,我的所有尝试都已生成.report

任何提示?

提前致谢。

我的路线(简化)如下:

org.apache.camel.CamelExchangeException: Invalid correlation key

1 个答案:

答案 0 :(得分:0)

也许使用bean引用作为关联表达式。

<correlationExpression>
    <method ref="dataCorrelationExpression" method="getPrefixString" />
</correlationExpression>

然后写一个bean来做,就像这样

public class DataCorrelationExpression {
    public String getPrefixString(@Header("CamelFileName") String filename) throws Exception {
        String[] parts = filename.split("\\.");
        if (parts.length != 2) {
            throw new Exception("Oh no!");
        }
        return parts[0];
    }
}

确保在Spring上下文中实例化bean。