2012-03-06 2 views
1

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

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

+0

Закончилось использование Exchange в качестве параметра метода и настройка свойства обмена для дальнейшего поиска в последующих процессорах. – Konstantin

ответ

1

уверен, просто сохранить его в явном виде в свойстве обмена (или заголовок сообщения) ...

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(); 
Смежные вопросы