访问camel中的初始交换消息

时间:2012-03-06 04:15:15

标签: java integration apache-camel

大家好我在需要为XML请求提供“复合”流程时遇到以下情况。这是我的春季路线定义的片段:

        <route id="request1">
        <from uri="activemq:request1" />
        <unmarshal ref="integrationServerJaxb" />
        <bean ref="createTINValidationMessage" />
        <bean ref="switchComponent" />
        <bean ref="createCreateTINMessage" />
        <bean ref="switchComponent" />
        <bean ref="createResponse1" />
        <marshal ref="integrationServerJaxb" />
    </route>

基本上我想要达到的目标是:

  1. 从request1消息队列中获取消息
  2. 从中创建TIN VALIDATION消息
  3. 将TIN VALIDATION消息发送到交换机
  4. 等待切换响应
  5. 使用来自步骤4的开关响应和初始请求1 XML消息,创建CREATE TIN消息
  6. 发送消息(从步骤5)到交换机
  7. 根据来自交换机的响应(来自步骤6)创建响应XML
  8. 换句话说,我需要在处理过程中掌握初始消息。在CreateCreateTINMessage bean中,我可以将方法参数更改为Message类型,然后它将映射到实际的Camel消息(从上一步开始),而不是交换中的第一条消息。检查消息的交换,我可以使用request1 xml有效负载跟踪初始JMS消息,但是深入了解似乎并不正确。我的问题是,是否有可能以某种方式执行与中间结果和来自路线的初始消息的集成?谢谢。

1 个答案:

答案 0 :(得分:2)

当然,只需在交换属性(或邮件头)中明确保留它......

from(...)
    .setProperty("ORIG_EXCH",body()) 
    ...
    .process(new Processor() {
        public void process(Exchange exch) throws Exception {
            Object orig = exch.getProperty("ORIG_EXCH");
            ...
        }
    })
    ...

或者您可以使用此API从您的路线中检索它......

exchange.getUnitOfWork().getOriginalInMessage();