2017-02-01 12 views
0

したシンプルな橋私はちょうど1が(http://docs.spring.io/spring-integration/reference/html/messaging-channels-section.htmlから取られた)このようにそれを行うことができますXMLでJavaアノテーションで別のdirectChannelから春の統合注釈

を埋める簡単な橋を定義する方法

<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

それはあなたの周りの仕事はOKですが、少し効率的

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

または

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

でなければなりません。

EDIT

次の2つのチャンネル、あなたがコントロールを持っていない設定をブリッジするか、別の方法で「ライブラリ」のconfigsの橋渡しにしたい場合は、これは、より効率的なバージョンです。出力チャンネルはハンドラではなく、サービス活性化注釈に行くことをあなたが持っているものの...

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

注意。この設定のスタイルについては、hereを参照してください。

+0

あなたの答えに感謝します。私はちょうどバンププロファイルに応じてそれらの間の異なる "ブリッジコンポーネント"をアクティブにしたいので、入力/出力チャンネルに注釈を付けることは望ましくありません。例えば単純なフォワーディングブリッジ、トランスフォーマー、... XMLで定義されたブリッジでは可能ですね。 – cproinger

+0

私が提供したのは、XMLスニペットと全く同じです.1つのチャネルから別のチャネルへのブリッジです。 –

+0

XMLでは、私はセクションで一般的な設定とブリッジで入力と出力のチャンネルを定義できます。アノテーションを使用すると、入出力チャネルに直接注釈を付ける必要があり、プロファイルとの接続方法を制御できません。 – cproinger

0

@ServiceActivatorを使用した回避策が見つかりましたが、それが100%であるかどうかはわかりません。

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