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