Apache Camel: экранирование URI в HTTP (и других производителях) - PullRequest
3 голосов
/ 02 июля 2011

В маршруте Apache Camel я хочу взять несколько заголовков и безопасно составить их в строку HTTP-запроса.Единственные примеры, которые я нашел, либо используют constant (), который бесполезен для построения строк динамического запроса, либо они используют simple (), который не предлагает экранирование URL.

Например, возьмем следующеефрагмент справа от документации компонента HTTP:

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

Это 90% пути, но что, если вы не всегда хотите идентификатор заказа 123?Мы хотели бы иметь возможность заменить значение заголовка здесь.Итак, следующая логическая версия - переключиться на простое:

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

Но главная проблема заключается в том, что URL не кодируется.Это означает, что пробел (или любой зарезервированный символ) в header.orderId приводит к исключению, выдаваемому компонентом HTTP для недопустимой строки запроса.

Таким образом, единственный оставшийся способ - использовать JavaScript, который оченьмногословно для чего-то подобного или для написания собственного процессора.Похоже, что это должно быть что-то встроенное, поэтому я прошу здесь, чтобы посмотреть, не хватает ли мне очевидного / нормального способа сделать то, что я ищу здесь?

1 Ответ

1 голос
/ 07 июля 2011
...