История до сих порСовокупные сообщения из <all> потока в Mule
У меня есть службы SOAP, который посылает свой ответ (говорят Response_A) к < все > потока. Внутри потока есть три службы SOAP (например, B, C и D), которые принимают входные данные от Response_A. Я принимаю поле из Response_A и используя XSLT, я могу сформулировать запросы на B, C и D.
Быстрый вопрос: Я использую <ASync> блоков внутри < все > для обработки сообщений параллельно. Обработка не была параллельной при использовании < всех > и < процессор-цепочка > теги внутри него. Любые идеи почему?
дорожная карта
Я буду читать ответы от всех трех B, C и D и объединить их в единый ответ (возможно, с использованием XSLT снова) и отправить его в Е.
The roadblock
После выхода из < все > поток, я получаю MuleMessageCollection. Как его прочитать и объединить сообщения в одно сообщение?
Мои попытки
Я попытался агрегирование сообщения на основе корреляции ID, но я заметил, что корреляция идентификатор присутствует только тогда, когда сообщение от A был разделен на < все > теге и направляется B, C и D. Идентификатор корреляции исчезает в конверте SOAP, который приходит как ответ от этих сервисов, даже если я повернул enableMuleSoapHeaders в true. Я не могу изменять службы. Итак, как мне сделать идентификатор корреляции в ответе SOAP (при условии, что идентификатор корреляции абсолютно необходим, если я хочу объединить сообщения)
Мне также понадобится размер группы для агрегирования сообщений.
Я даже попытался добавить идентификатор корреляции с использованием трансформатора свойств сообщения, но это не сработало. Я застрял в MessageCollection и не знал, как его читать, хотя в нем есть сообщения с идентификатором корреляции.
Таким образом, это сводится к одному вопросу. Каковы способы объединения сообщений из MessageCollection?
Я хочу сделать это в xml, не записывая собственный трансформатор в Java. Является ли это возможным? Какой должен быть мой подход?
Примечание: Ответные сообщения от B, C и D имеют разные структуры DOM. Объединенное сообщение, которое я хочу создать, имеет разные DO из всех ответов и запросов A, B, C и D.
Если это помогает, я пытаюсь работать в аналогичной ситуации, как описано здесь: http://ricston.com/blog/?p=640 Единственная разница в том, что я использую потоки и тег all.
спасибо Давиду. Вы мой спаситель. :) Итак, есть ли у вас идеи по накоплению сообщений в коллекции сообщений? Я получаю объект CopyOnWriteArrayList, который содержит как ответы XML, которые мне нужно объединить в один. Я мог видеть это на консоли сервера tc, когда я попытался отправить его в качестве ввода на следующий сервер. Итак, как мне объединить сообщения, присутствующие в CopyOnWriteArrayList, и отправить их как XML для следующей службы? На этом последнем этапе мой запланированный поток будет завершен. – r3st0r3
CopyOnWriteArrayList на самом деле просто java.util.List. Этот список содержит все, что было возвращено из удаленных вызовов (строки или байт [] или InputStream, проверьте его). Поэтому вам нужно создать трансформатор, который собирает эти полезные нагрузки. Кажется, вы хотите, чтобы они являлись объектами XML, поэтому необходимо собрать их под новым корнем (например,) и передать это компоненту компонента ответа. –
Я понял. Я добавил объект в XML-трансформатор после CopyOnWritArrayList и написал собственный трансформатор в Java. Я хотел сделать это с помощью XSLT, но я не очень хорошо знаю XSLT. – r3st0r3