大家好,当我需要对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>


基本上我想实现的是:


从request1消息队列中获取消息
从中创建TIN验证消息
发送TIN VALIDATION消息到交换机
等待切换响应
使用来自步骤4的切换响应和初始请求1 XML消息,创建CREATE TIN消息
将消息(从第5步)发送到交换机
根据来自交换机的响应创建响应XML(来自步骤6)


因此,换句话说,我需要在处理过程中掌握初始消息。在CreateCreateTINMessage bean中,我可以将method参数更改为Message type,然后将其映射到实际的Camel Message(虽然来自上一步),而不是交换中的第一条消息。检查消息的交换,我可以使用request1 xml负载跟踪初始的JMS消息,但深入了解似乎不正确。我的问题是,是否可以通过某种方式与中间结果和路线的初始消息进行整合?谢谢。

最佳答案

当然,只需将其显式保存在交换属性(或消息标头)中...

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();

关于java - 访问 Camel 中的初始交换消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9577801/

10-16 23:30