2011-07-02 3 views
3

Apache Camelのルートでは、いくつかのヘッダを取り、HTTPクエリ文字列に安全に組み立てたいと思っています。私が見つけた唯一の例は、動的クエリ文字列を構築するのには便利ではないconstant()を使うか、URLエスケープを提供しないsimple()を使います。Apache Camel:HTTP(および他のプロデューサ)でエスケープするURI

例えば、右のHTTPコンポーネントのドキュメントから、次のスニペットを取る:

from("direct:start") 
     .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short")) 
     .to("http://oldhost"); 

これは、そこに道の90%ですが、あなたは常に注文ID 123をしたくない場合はどう?ここでヘッダー値を代用できるようにしたいと考えています。したがって、次の論理バージョンは単純に切り替えることです:

from("direct:start") 
    .setHeader(Exchange.HTTP_QUERY, simple("order=${header.orderId}&detail=short")) 
    .to("http://oldhost"); 

しかし、これはURLエンコードされていないという大きな問題があります。つまり、header.orderId内の空白(または予約文字)が無効なクエリ文字列のHTTPコンポーネントによってスローされます。

これで残っている唯一の方法は、JavaScriptを使用することです。このようなことは非常に冗長で、カスタムプロセッサを作成することです。これは内蔵されたものでなければならないと思われるので、ここで私がここで探しているものを行うための明らかな/正常な方法がないかどうかを尋ねています。 ここをお探しですか?

答えて

関連する問題