Apache Camel ルートでは、いくつかのヘッダーを取得し、それらを安全な方法で HTTP クエリ文字列に構成したいと考えています。私が見つけた唯一の例は、constant() を使用しており、これは動的クエリ文字列の作成には役に立たないか、URL エスケープを提供しない simple() を使用しています。
たとえば、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 を使用するか、カスタム プロセッサを作成することです。これは組み込みのものであるように思われるので、ここで探していることを行うための明白な/通常の方法が欠けているかどうかを確認するためにここに尋ねていますか?