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