2012-07-27 12 views
7

私は2つの操作を持つサービスを持っています。私のプロセッサ豆でApache Camelの条件付きルーティング

<camel:route id="myRoute"> 
    <camel:from uri="cxf:bean:myListenerEndpoint?dataFormat=POJO&amp;synchronous=true" />    
    <camel:bean ref="processor" method="processMessage"/> 
    <camel:to uri="xslt:file:resources/service/2.0.0/UserRegistration.xsl"/> 
    <camel:to uri="cxf:bean:myTargetEndpoint"/> 
</camel:route> 

、私は指定:

RegisterUser registerUser = exchange.getIn().getBody(RegisterUser.class); 

は私が登録ユーザーオブジェクトを取得

RegisterUser 
UpdateUser 

私はラクダの敗走を持っています。すべてうまく動作します。サービス操作は、私は特定のBeanへのメッセージをルーティングしたいRegisterUserであり、サービスの操作がUpdateUserであれば、私はメッセージをルーティングする場合

: 問題は、私は例えばのために、私の要求条件付きルートにラクダをしたいということです他のBeanに転送します。

私はラクダxPathを使用しようとしましたが、動作していないようです。

<camel:route id="myRoute"> 
    <camel:from uri="cxf:bean:myListenerEndpoint?dataFormat=POJO&amp;synchronous=true" /> 
    <camel:choice> 
     <camel:when> 
      <camel:xpath> 
       //RegisterUser 
      </camel:xpath> 
      <camel:bean ref="processor" method="processMessage"/> 
      <camel:to uri="xslt:file:resources/service/2.0.0/UserRegistration.xsl"/> 
     </camel:when> 
    </camel:choice>       
    <camel:to uri="cxf:bean:myTargetEndpoint"/> 
</camel:route> 

さまざまなターゲットにルーティングするようにラクダを設定する方法を検索していましたが、何も見つかりませんでした。誰かがどこに問題があるのか​​分かっているのだろうか?

答えて

14

を試みます。あなたが探しているヘッダが「のoperationName」だからここ

と呼ばれる

は一例です。

<camelContext xmlns="http://camel.apache.org/schema/blueprint"> 
    <route id="example"> 
     <from uri="cxf:bean:myListenerEndpoint?dataFormat=POJO&amp;synchronous=true" /> 
     <log message="The expected operation is :: ${headers.operationName}" /> 
     <choice> 
      <when> 
       <simple>${headers.operationName} == 'RegisterUser'</simple> 
        <bean ref="processor" method="processMessage"/> 
       <to uri="xslt:file:resources/service/2.0.0/UserRegistration.xsl"/> 
      </when> 
      <when> 
       <simple>${headers.operationName} == 'UpdateUser'</simple> 
       <!-- Do the update user logic here --> 
       <bean ref="processor" method="updateUser" /> 
      </when> 
     </choice> 
    <to uri="cxf:bean:myTargetEndpoint"/> 
    </route> 
</camelContext> 

(apacheの牡羊座の青写真を使用している例を注意してください - それは春のために同じになり、名前空間以外)

+0

これは私にとって素晴らしい作品です。正確に私が必要としたもの。ありがとうございました! :) –

4

は、必要な操作の情報は、メッセージのヘッダーになります...このためcamel-simple式の代わりにXPathを使用

<when><simple>${body} is 'com.RegisterUser'</simple><to uri="..."/></when> 
関連する問題