доступ к первоначальному обменному сообщению на верблюде - PullRequest
1 голос
/ 06 марта 2012

Привет, ребята. У меня следующая ситуация, когда мне нужно иметь «составной» процесс для запроса 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 И XML-сообщением начального запроса 1, создать сообщение CREATE TIN
  6. отправить сообщение (с шага 5) на коммутатор
  7. создание XML ответа на основе ответа от коммутатора (из шага 6)

Другими словами, мне нужно получить начальное сообщение во время обработки. В бине CreateCreateTINMessage я могу изменить параметр метода на тип сообщения, тогда он будет отображен в фактическое сообщение верблюда (хотя с предыдущего шага), а не в самое первое сообщение в обмене. Изучив обмен сообщениями, я мог отследить исходное сообщение JMS с полезной нагрузкой request1 xml, но получить такое углубление не представляется правильным. У меня вопрос, можно ли как-то выполнить интеграцию с промежуточным результатом и исходным сообщением с маршрута? Спасибо.

1 Ответ

2 голосов
/ 07 марта 2012

конечно, просто сохраните это явно в свойстве exchange (или заголовке сообщения) ...

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