All,

I hate to reply to my own post, but I'm shocked that nobody else sees
this as an issue. Sending an HTTP request is obviously a common use
case. As soon as you leave the world of unit-tests and enter
production-code, URL encoding is inevitably a requirement. Am I really
misunderstanding something here? I'm willing to help implement the
changes required to support my use-case, but I need some validation
that it really doesn't exist today before I go duplicating work.

Thanks,
Tolga

On Wed, May 25, 2011 at 8:29 PM, Tolga Tarhan <to...@netbrains.com> wrote:
>
> All,
>
> I've scoured the internet looking for an answer to something that I
> believe should be very simple with Camel: I want to take several
> headers and compose them into an HTTP query string in a safe way. The
> only examples I've found either use constant(), which isn't useful for
> building dynamic query strings, or they use simple() which doesn't
> offer URL escaping.
>
> For example, take the following snippet right from HTTP component's
> documentation:
>
> from("direct:start")
>  .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
>  .to("http://oldhost";);
>
> This is 90% of the way there, but what if you don't always want order
> id 123? We'd like to be able to substitute a header value here. So,
> the next logical version of this is to switch to simple:
>
> from("direct:start")
>  .setHeader(Exchange.HTTP_QUERY,
> simple("order=${header.orderId}&detail=short"))
>  .to("http://oldhost";);
>
> But this has the major issue of not being URL encoded. This means that
> a space (or any reserved character) in header.orderId results in an
> exception thrown by the HTTP component for an invalid query string.
>
> So the only way that's left is to use JavaScript, which is very
> verbose for something like this, or to write a custom processor. It
> seems like this should be something that's built-in, so I'm asking
> here to see if I'm missing an obvious/normal way to do what I'm
> looking for here?
>
> Thanks for the help,
> Tolga

Reply via email to