camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From boday <>
Subject Re: URI Escaping in HTTP (and other Producers)
Date Sat, 02 Jul 2011 04:06:33 GMT
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"));

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 &lt;;
> 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 -

View this message in context:
Sent from the Camel - Users mailing list archive at

View raw message