I can't find a DSL API to do this either. And yes, the value in the HTTP_QUERY header is assumed to be encoded by design (so it doesn't double encode, etc).
Log a JIRA (and submit a patch if you'd like)...and I'll take a look. For now, just throw in a simple processor and be done with it... .process( new Processor() { public void process(Exchange exchange) throws Exception { String encoded = URLEncoder.encode((String)exchange.getIn().getHeader("orderId"), "UTF-8")); exchange.getIn().setHeader(Exchange.HTTP_QUERY,encoded); } }) TTar wrote: > > 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 > ----- Ben O'Day IT Consultant -http://consulting-notes.com -- View this message in context: http://camel.465427.n5.nabble.com/URI-Escaping-in-HTTP-and-other-Producers-tp4427457p4543958.html Sent from the Camel - Users mailing list archive at Nabble.com.