2016-04-19 12 views
1

私はCamelのJava DSLを使用してルートを作成しています。

新しいプロセッサまたはBeanを作成せずにテキスト置換を実行したいと考えています。

私はこれ持っている:私は型の不一致エラーが出る「定数」を追加しない場合

.setHeader(MY_THING, 
    constant(my_template.replace("{id1}", simple("${header.subs_val}").getText()))) 

を。私がgetText()をsimple()の部分に置かないと、テキスト不一致の答えが得られます。私のルートを走らせるとき、それは{id}をリテラル${header.subs_val}と置き換えるのではなく、私の値をヘッダーから取り出します。しかし、引用符を取り除くと、コンパイルエラーが発生します。 Javaはもちろん${...}の構文を知らない。

展開には数分かかるため、実験は高価です。

私は単純な置換をどうすればいいのですか。私がウェブ上で見つけていることは、実際にはうまくいくとは思われません。

EDIT - テンプレートとは何ですか?具体的には、文字列(それはURLです)

http://this/that/{id1}/another/thing 

私はいくつかのコードを継承しましたので、私は単にto(...) URLすることができませんし、特別.tof()(??)の書式を適用します。

+1

あなたの例では、my_templateとは何ですか? – ltsallas

+1

そして、my_templaテは交換に関連していますか?詳細をご希望の場合は、ケースを再現しようとしています。テンプレート内のidというパラメータをheader.subs_valの内容に置き換えたいと思っていますが、テンプレートの内容を把握することはできません。 – ltsallas

+0

@ltsallas –

答えて

2

興味深いケース!

ヘッダーにmy_templateを配置する場合は、下の例のように入れ子式の単純な式(Camel 2.9以降)を使用できます。この例ではsubs_valに値を設定していますが、あなたのヘッダーはすでにルートの値を持っているとします。このステップヘッダMY_THING後

.setHeader("my_template", constant("http://this/that/{id1}/another/thing")) 
    .setHeader("subs_val",constant("22")) 
    .setHeader("MY_THING",simple("${in.header.my_template.replaceAll(\"\\{id1.?\",${in.header.subs_val.toString()})}")) 

http://this/that/22/another/thingを有しています。

1)この例では、to_String()をスキップできますが、ヘッダー "subs_val"のタイプがわかりません。

2)私はreplaceAll(\ "\ id1 \"} \ ")で最初に試しましたが、おそらくこれはバグです。私が使用していました。?

3)あなたは交換が可能なプロセッサー、内部でアプリケーションをデバッグするとアプリ

SimpleBuilder.simple("${in.header.url.replaceAll(\"\\{id1.?\",${in.header.subs_val.toString()})}").evaluate(exchange, String.class); 
を再起動することなく、あなたのIDEで簡単な式を評価するSimpleBuilderを使用することができます

希望しました:)

+0

ありがとうございます。テンプレートがヘッダーに置かれる理由はありませんが、そこには何も傷つけることはありません。上記のあなたの代入は、私がやったことであるProcessorの実装を使うよりもはるかにクリーンです。 –

+0

私はテンプレートが注入されたという最新のコメントを読んだだけです。単純な言語では、値(外部プロパティ、Beanなど)を読み取るためのさまざまなオプションが用意されています。https://camel.apache.org/simple.htmlの変数を参照してください。おそらく、このオプションの1つがよりクリーンです。あなたのルート(特にこのテンプレート注入部分)の部分を追加することが好きなら、他の利用可能な単純な式の値の1つが交換のヘッダーでこの設定を避けるのに役立つかどうかを調べることができます – ltsallas

+0

私はそれがもっと綺麗になる。 –