The method org.apache.camel.component.rss.RssComponent#afterConfiguration creates the Url that will be used to fetch the rss feed. We find that with some url's url encoding goes wrong.
AfterConfiguration() calls org.apache.camel.util.URISupport#createRemainingURI This method first calls org.apache.camel.util.URISupport#createQueryString, which is a method that will iterate over a map of request parameters, escape each param name and value using java.net.URLEncoder#encode, and put them together with all the & and = stuff to form the query string.
Then it calls org.apache.camel.util.URISupport#createURIWithQuery Which is a method that takes a URI (the base url) and the constructed query string, and simply creates a new URI with that, returning the toString() output from that.
So this is what the output of this procedure looks like: http://api.flickr.com/services/feeds/photos_public.gne?format=rss_200&id=23353282%2540N05&lang=en-us&tags=lowlands
1 the @ sign was escaped by org.apache.camel.util.URISupport#createQueryString, creating a query string like: id=23353282%40N05&tags=lowlands&lang=en-us&format=rss_200 (which is good)
2 the URI constructor then finds the % in %40 and escapes that again! creating a url like: http://api.flickr.com/services/feeds/photos_public.gne?format=rss_200&id=23353282%2540N05&lang=en-us&tags=lowlands
Which predictably fails...
I did some tests with the URI constructor, and it seems it only escapes % chars, everything else is left alone.
I attach a groovy script that demonstrates the problem
|Component/s||camel-rss [ 11773 ]|
|Assignee||Claus Ibsen [ davsclaus ]|
|Status||Open [ 1 ]||Resolved [ 5 ]|
|Fix Version/s||2.5.0 [ 12320 ]|
|Resolution||Fixed [ 1 ]|
|Project Import||Sat Nov 27 00:14:50 EST 2010 [ 1290834890113 ]|
|Status||Resolved [ 5 ]||Closed [ 6 ]|