Camel
  1. Camel
  2. CAMEL-3114

url encoding goes wrong in org.apache.camel.component.rss.RssComponent#afterConfiguration

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.4.0
    • Fix Version/s: 2.5.0
    • Component/s: camel-rss
    • Labels:
      None
    • Environment:

      jdk: Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
      platform: linux (ubuntu 10.04)

      Description

      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.

      consider this url: http://api.flickr.com/services/feeds/photos_public.gne?id=23353282@N05&tags=lowlands&lang=en-us&format=rss_200

      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

      regards,

      Ernst Bunders

      1. test.groovy
        1 kB
        Ernst Bunders

        Activity

        Hide
        Ernst Bunders added a comment -

        this script demonstrates the problem

        Show
        Ernst Bunders added a comment - this script demonstrates the problem
        Hide
        Claus Ibsen added a comment -

        Can you create a pure Java unit test which demonstrates this, then it can be included as an unit test in the source

        Show
        Claus Ibsen added a comment - Can you create a pure Java unit test which demonstrates this, then it can be included as an unit test in the source
        Hide
        Ernst Bunders added a comment -

        I guess I could do that

        Show
        Ernst Bunders added a comment - I guess I could do that
        Hide
        Claus Ibsen added a comment -

        trunk: 998608.

        I found the bug and fixed it. I can now read the feed from flickr.

        Thanks for reporting. Feel free to test it on your system as well.

        Show
        Claus Ibsen added a comment - trunk: 998608. I found the bug and fixed it. I can now read the feed from flickr. Thanks for reporting. Feel free to test it on your system as well.
        Hide
        Claus Ibsen added a comment -

        Closing all resolved tickets from 2010 or older

        Show
        Claus Ibsen added a comment - Closing all resolved tickets from 2010 or older

          People

          • Assignee:
            Claus Ibsen
            Reporter:
            Ernst Bunders
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development