Я бы хотел настроить процесс, который будет выглядеть примерно так:
Method Call -> Dynamic Proxy Gateway -> Channel -> Service Activator -> Method Call
^---------- Transformer <- Channel <- [return value]
По сути, я бы хотел как-то получить доступ к скрытому каналу, который Spring Integration создает, и преобразовать полезную нагрузку возвращаемого сообщения в другой тип сообщения.
На первый взгляд может показаться, что простым решением является настройка канала ответа по умолчанию на шлюзе, проблема в том, что я делю канал между пакетами, используя OSGi. Активатор службы предоставляется пакетом «B» и предлагает общий канал для входящих запросов (он действует как служба поставщика данных). Пакет «А» требует некоторых данных, поэтому он запрашивает их, но требует результата в альтернативном формате. Обратите внимание, что если Bundle «B» сможет использовать канал ответа по умолчанию, указанный в Bundle «A», то Bundle «A» должен совместно использовать его. Это все справедливо и хорошо, но тогда у меня круговая зависимость в OSGi, и ничего не запустится.
Похоже, что другим решением здесь было бы определить выходной канал на Service Activator, но это страдает от немного другой проблемы. Предполагая, что я использую выходной канал из пакета "B", я уменьшил проблему циклической зависимости, но теперь, когда кто-то запрашивает что-то из пакета "A", ответ отправляется всем, кто подключен к выходному каналу - это тоже нежелательно .
[ Edit : Здесь я имею в виду, что если «B» совместно использует входной и выходной каналы для своего активатора службы, то любой, связанный с выходным каналом «B», получит результат чей-либо запрос на входной канал "B" - и желаемое поведение заключается в том, что ответы направлены на запросчиков.
Я должен отметить, что преобразователь здесь имеет смысл только в контексте Пакета A. Пакет B предоставляет сервис (для всех целей и задач, который я не могу контролировать). Преобразование, специфичное для потребностей Пакета А, должно находиться в Пакете А.] *
Итак, я действительно нуждаюсь в том, чтобы сконфигурировать преобразователь для ответов на динамический прокси-шлюз, но, возможно, я не смогу найти такое устройство в руководстве по интеграции с Spring. Как всегда, помощь будет принята с благодарностью.
-
Редактировать 2 : я попробовал две другие тактики здесь:
Используйте сервис-активатор, который ссылается на общий канал OSGi из Bundle B
В результате был возвращен элемент GenericMessageType, который можно было преобразовать. GenericMessageType - это действительно логический результат метода «send», на который должен указывать активатор службы, а не ответное сообщение. Так что этот метод не работает.
Используйте заголовок, чтобы установить REPLY_CHANNEL и передать канал ответа в качестве ссылки, а не значения.
Этот метод не работал не , элемент заголовка REPLY_CHANNEL, по-видимому, игнорируется, если задан канал ответа по умолчанию шлюза (и канал ответа по умолчанию должен быть установлен).