是否可以在拆分或从另一个交换机检索标头后修改消息

时间:2016-11-06 16:19:33

标签: java apache-camel splitter

这是我的问题我有以下分类器:

public class MySplitterBean {

    public List<Message> splitMessage(Message m) {
        List<Message> answer = new ArrayList<Message>();
        for (int i=0; i<3; i++) {
            DefaultMessage message = new DefaultMessage();
            message.setHeaders(m.getHeaders());
            message.setBody(m.getBody());
            answer.add(message);
        }
        return answer;
    }
}

在途中:

<split strategyRef="someClassStrategy">
   <method ref="mySplitterBean" method="splitMessage" />
   <choice>
    <when>
    <simple>${property.CamelSplitIndex} == 0</simple>
    <!-- 1. calculate something and store result in header, for example set header test=12345 -->
    </when>
    <otherwise>
    <!-- 2. now how can I retrieve "test" header from above exchange (from splitIndex 0) -->
    </otherwise>
   </choice>
</split>

在另外的块中我有MySplitterBean复制的消息对象,但是我想以某种方式得到分割后创建的“test”头(处理夹板索引0时)。所以我的问题是它是否可行,以及如何使其发挥作用?

2 个答案:

答案 0 :(得分:1)

您可以在拆分操作之前使用虚拟对象设置属性值。 每个交换对象都可以通过引用调用来访问该对象。 根据它的值,您需要一个额外的容器,如列表,以保证您可以访问同一个对象。

答案 1 :(得分:0)

否则,如果拆分索引为零,则无法访问块,&#34; test&#34;在这种情况下,无法从同一个交换机检索标头。它可以在选择区外访问。