Как разрешить обработчик и метод динамически из заголовков?

Мой поток такой

private IntegrationFlow myChannel() {
    return f -> f
            ...
            .handle("myHandler", "myMethod")
            ...
}

Как разрешить обработчик myHandler и метод myMethod динамически из заголовков?


person Mike    schedule 18.01.2019    source источник


Ответы (2)


Добавьте .router() с подпотоками для каждого значения заголовка.

person Gary Russell    schedule 18.01.2019
comment
Смотрите мой ответ. Не уверен, однако, что это настолько законный способ злоупотребления внедрением зависимостей :-) - person Artem Bilan; 18.01.2019
comment
Спасибо. Я думаю, что метод .router() — лучший и стандартный способ справиться с этим, но также хорошо знать метод MethodInvokingMessageProcessor. - person Mike; 20.01.2019

Прежде всего нам нужно понять, для чего нужна такая бизнес-логика.

Я думаю, что мы можем удовлетворить ваши требования с помощью этого кода:

.handle((p, h) -> 
        new MethodInvokingMessageProcessor(h.get("myHandler"), h.get("myMethod", String.class)
                        .processMessage(new GenericMessage<>(p, h))))
person Artem Bilan    schedule 18.01.2019
comment
Спасибо за ответ. Цель состоит в том, что я реализовал интеграционное приложение, которое интегрирует службы REST. Службы имеют разные типы аутентификации (базовый, ключ API, пользовательский и т. д.), и я хотел иметь разные подклассы аутентификации для разных типов аутентификации. Все эти классы имеют одну и ту же цель — установить заголовок Authorization. - person Mike; 20.01.2019