2017-02-01 3 views
0

, как я могу определить простой мост, который только мосты от одного directChannel к другому с ява аннотаций в XMLвесна-Интеграция Simple Bridge с аннотацией

один может сделать это так (взято из http://docs.spring.io/spring-integration/reference/html/messaging-channels-section.html)

<int:bridge input-channel="input" output-channel="output"/> 

с аннотациями я ожидал бы определение, чтобы выглядеть как-то это

@Bean 
@BridgeFrom("inboundChannel") 
@BridgeTo("outboundChannel") 
public MessageChannel bridge() { 
    return new DirectChannel(); 
} 

, но это дает мне ошибку

IllegalArgumentException: '@BridgeFrom' is eligible only for 'MessageChannel' '@Bean' methods 

любые предложения, как бы я перевел указанное выше определение xml в java-config-definition?

ответ

1

Это должно быть

@Bean 
@BridgeTo("output") 
public MessageChannel input() { 
    return new DirectChannel(); 
} 

или

@Bean 
@BridgeFrom("input") 
public MessageChannel output() { 
    return new DirectChannel(); 
} 

Ваша работа вокруг хорошо, но немного менее эффективно.

EDIT

Если вы хотите, чтобы соединить два канала, конфигурации, для которых вы не имеете контроля, или вы хотите, чтобы соединить между «библиотеки» конфиги по-разному, это более эффективная версия что у вас есть ...

@Bean 
@ServiceActivator(inputChannel="inboundChannel") 
public MessageHandler bridge() { 
    BridgeHandler handler = new BridgeHandler(); 
    handler.setOutputChannelName("outboundChannel"); 
    return handler; 
} 

Обратите внимание, что выходной канал переходит на обработчик, а не служба активатор аннотаций. См. here для этого стиля конфигурации.

+0

спасибо за ваш ответ. я просто не хочу комментировать каналы ввода/вывода, потому что я хочу активировать разные «мостиковые компоненты» между ними в зависимости от профиля пружины. например простой переадресационный мост, трансформатор, ... это было бы возможно с мостом, определяемым xml. Я думаю, – cproinger

+0

То, что я представил, является точным эквивалентом фрагмента XML - перекрестки с одного канала на другой. –

+0

не совсем. с XML, я могу определить входные и выходные каналы в общей конфигурации и мост в разделе . с аннотациями мне нужно будет аннотировать входные/выходные каналы напрямую и, следовательно, не может контролировать, как они подключаются к профилю. – cproinger

0

Я нашел обходное решение с помощью @ServiceActivator, но я не уверен, что это эквивалентно 100%.

@ServiceActivator(inputChannel = "inboundChannel", outputChannel = "outboundChannel") 
public Message<?> bridge(Message<?> m) { 
    return m; 
}