web-dev-qa-db-ja.com

Apache Camel:変数を後で使用するために格納する方法

spring DSLを使用してCamelで「遊んで」いるときに、次の問題に遭遇しました。予想されるメッセージフローが次のようであるとします。

  1. クライアントはHTTP POST XML本文のメッセージをCAMELに送信します
  2. CAMELプロキシーHTTP POSTサーバーへのメッセージ。受信したXML本文からの情報を使用して、URIを少し調整します(例:XPATHを使用して特定のパラメーターを除外します)
  3. cAMELが応答を受信した後、CAMELは1で受信したXML本体からのパラメーターを使用して、サーバーにHTTP PUTメッセージを送信します。

したがって、次のようなもの:

<route>
   <from uri="...">
   <to uri="...">
   <to uri="...">
 </route>

質問:ステップ1でSpring DSLにパラメーターを保存して、後でステップ3で使用できるようにするにはどうすればよいですか?

したがって、ステップ1で受信したメッセージのXML本体からXMLパラメーターを抽出し、変数に入れて、後でステップ3で送信するメッセージを作成するために使用できるようにしたいと思います。

パラメータを抽出するために、XPATHの使用を考えていました。それは問題ないように見えますが、XPATHの出力を変数に入れて、後でその変数を使用する方法がわかりません...(構文??)

注:ご覧のように、私の開発知識はかなり限られています...申し訳ありません。しかし、誰かがこれを手伝ってくれるならそれでもすばらしいでしょう:)。

18
opstalj

Exchange プロパティまたはこのようなメッセージヘッダーにストアデータを設定できます...

.setHeader("ID", XPathBuilder.xpath("/order/@id", String.class))
.setProperty("ID", XPathBuilder.xpath("/order/@id", String.class))

次に、Bean /プロセッサでExchangeから次のように取得します...

String propId = (String) exchange.getProperty("ID");
String headerId = (String) exchange.getIn().getHeader("ID");                        }
20
Ben ODay

いくつか例を挙げましょう。

<setHeader headerName="token">
    <constant>someValue</constant>
</setHeader>

<setHeader headerName="userName">
    <simple>${properties:userName}</simple>  //from config
</setHeader>

<setProperty propertyName="bodyBkp">
    <simple>${in.body}</simple>
</setProperty>

<setProperty propertyName="orderNumber">
    <xpath resultType="String">//item[1]/orderNumber/text()</xpath>
</setProperty>

ゲッター

${exchangeProperty[orderNumber]}

${in.headers.token}

ドキュメント

簡単な表現言語を確認してください: http://camel.Apache.org/simple.html

キャメルのテストケースを確認することも、特にSpring DSLの場合に役立ちます。

4