Как объявить повторно используемый преобразователь в XML без 'input-channel'? - PullRequest
0 голосов
/ 21 ноября 2018

В моем приложении я хотел бы повторно использовать один и тот же преобразователь сообщений внутри нескольких <int:chain>.

. В таких цепочках я выполняю http-запросы к различным конечным точкам и мне нужно добавить один и тот же базовый заголовок аутентификации.,Я хотел бы объявить код для добавления заголовка только один раз, то есть:

<int:header-enricher id="authHeaderAdder">
    <int:header expression="'Basic ' + new String(T(java.util.Base64).encoder.encode(('${http.user}' + ':' + '${http.password}').bytes))"
                name="Authorization"/>
</int:header-enricher>

И затем я хотел бы использовать его с ref в моей цепочке перед выполнением запроса http:

<int:chain input-channel="someHttpChain">
    <int:transformer ref="authHeaderAdder"/>
    <http:outbound-gateway.../>
    <int:transformer ref="someResponseTransformer"/>
</int:chain>

Проблема в том, что я получаю ошибку при запуске приложения:

Проблема конфигурации: атрибут 'input-channel' необходим для элемента конечной точки верхнего уровня: 'int: header-enricher 'with id =' authHeaderAdder '

Как я могу повторно использовать authHeaderAdder без написания кода Java и создания <bean/>?

1 Ответ

0 голосов
/ 21 ноября 2018

Вам определенно нужно использовать input-channel для этого <int:header-enricher>, например, input-channel="authChannel", но внутри <chain> вы получаете усиление, чтобы использовать что-то вроде <int:gateway request-channel="authChannel"/>.Вот и все: вы повторно используете тот же самый преобразователь, но с помощью трюка Spring Integration с MessageChannel.

Такой подход хорош тем, что вы можете добавить больше конечных точек в этот authChannel поток без каких-либо изменений в исходном потоке, в котором вы используете этот gateway.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...