HttpComponents HttpClient
  1. HttpComponents HttpClient
  2. HTTPCLIENT-851

Helper classes for HttpClient : spring-like templates, Gzip interceptor, spring FactoryBean, ...

    Details

    • Type: New Feature New Feature
    • Status: Closed
    • Priority: Major Major
    • Resolution: Won't Fix
    • Affects Version/s: 4.0 Beta 2
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None

      Description

      HttpClient API is pretty much low-level, and needs some obscure setup (Registry, ..) to target the common use case (sometimes, you don't care about the low level details, you just
      want to fire an http client, and hit a given web resource).

      I have extracted some supporting code out of my application in the hope to make it widely available for others. It is available at :
      http://www.sirika.com/maven2/releases/com/sirika/httpclienthelpers/com.sirika.httpclienthelpers-assembly/0.1/com.sirika.httpclienthelpers-assembly-0.1-all.zip

      It contains :

      • HttpClientTemplate that automatically open/close connections in case of exceptions.It also provides a kind of generic http error handling mechanism.
      • a spring HttpClientFactoryBean (as well as a helper factory class for httpclient) that allows setting up http client for the common use case
      • an InputStreamSourceBody that can be used to create POST entities that are repeatable, wrapping a spring InputStreamSource
      • the code for the GZIP interceptors that are documented as examples on httpclient website.

      The code is still not tested (just extracted that logic from my application), needs some polishing, and a few things like the error handling mechanism still need more thought. But I feel it can be helpful to others.
      So, my question is : can we create a kind of -contrib project for httpclient, that allows people to share their helpers with the community ?

      the code is currently available under under apache v2 license, but I'm willing to adopt whatever licensing/copyright issues that would help to make this available.

      Oh, also, if you want to see the code in action, here's an example of a REST client that uses it :
      http://www.sirika.com/maven2/releases/com/sirika/pymager/pymager-java-client-assembly/0.11/pymager-java-client-assembly-0.11-all.zip
      (which is another project born out of extracted code from my application, that I'm trying to push as open source ; I just lack time to handle the community / website / etc issues).

      Sami Dalouche

        Activity

        Hide
        Sami Dalouche added a comment -

        OK, I will create a patch against contrib's svn trunk.

        Show
        Sami Dalouche added a comment - OK, I will create a patch against contrib's svn trunk.
        Hide
        Oleg Kalnichevski added a comment -

        > what do I need to do in order to submit it to the contrib package ?

        Hi Sami
        The best way to contribute your code is by submitting it as a patch against SVN trunk. If you are familiar with SVN, svn diff command will produce a file in the unified diff format which you could attach to this issue.

        Oleg

        Show
        Oleg Kalnichevski added a comment - > what do I need to do in order to submit it to the contrib package ? Hi Sami The best way to contribute your code is by submitting it as a patch against SVN trunk. If you are familiar with SVN, svn diff command will produce a file in the unified diff format which you could attach to this issue. Oleg
        Hide
        Sami Dalouche added a comment -

        The BasicResponseHandler interface is not exactly what I'm looking for. I need something :

        • on which I can plug my own exception handling/mapping (some errorrs might be globally handled, while some might be request-specific, and this only allows)
        • that allows streaming the result. This collects everything as one-big-stream.

        However, I might be able to reuse the ResponseHandler interface, so I can integrate my code more idiomatically.

        Good news for the GZIP interceptors. Looking forward to having 4.1.0

        The extracted code is already re-licensed under Apache v2, (unless I screwed up some header somewhere), what do I need to do in order to submit it to the contrib package ?

        Regards,
        sami

        Show
        Sami Dalouche added a comment - The BasicResponseHandler interface is not exactly what I'm looking for. I need something : on which I can plug my own exception handling/mapping (some errorrs might be globally handled, while some might be request-specific, and this only allows) that allows streaming the result. This collects everything as one-big-stream. However, I might be able to reuse the ResponseHandler interface, so I can integrate my code more idiomatically. Good news for the GZIP interceptors. Looking forward to having 4.1.0 The extracted code is already re-licensed under Apache v2, (unless I screwed up some header somewhere), what do I need to do in order to submit it to the contrib package ? Regards, sami
        Hide
        Oleg Kalnichevski added a comment -

        > HttpClient API is pretty much low-level, and needs some obscure setup (Registry, ..) to target the common use case
        > (sometimes, you don't care about the low level details, you just want to fire an http client, and hit a given web resource).

        Hi Sami

        Have you looked at the ResponseHandler interface? In essence it is very much like Spring callback interface while HttpClient acts as a template for that callback.
        http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient/src/examples/org/apache/http/examples/client/ClientWithResponseHandler.java

        > the code for the GZIP interceptors that are documented as examples on httpclient website

        There has been some work done on including transparent content compression into the stock version of HttpClient. Feel free to review the code and contribute whatever bits you find lacking.

        https://issues.apache.org/jira/browse/HTTPCLIENT-834

        > can we create a kind of -contrib project for httpclient, that allows people to share their helpers with the community ?

        There is already such a contrib package, but all the code in that package is distributed as source only. If that is okay with you, feel free to submit your components for inclusion into that package but you will have to re-license it under Apache License v2.

        Oleg

        Show
        Oleg Kalnichevski added a comment - > HttpClient API is pretty much low-level, and needs some obscure setup (Registry, ..) to target the common use case > (sometimes, you don't care about the low level details, you just want to fire an http client, and hit a given web resource). Hi Sami Have you looked at the ResponseHandler interface? In essence it is very much like Spring callback interface while HttpClient acts as a template for that callback. http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient/src/examples/org/apache/http/examples/client/ClientWithResponseHandler.java > the code for the GZIP interceptors that are documented as examples on httpclient website There has been some work done on including transparent content compression into the stock version of HttpClient. Feel free to review the code and contribute whatever bits you find lacking. https://issues.apache.org/jira/browse/HTTPCLIENT-834 > can we create a kind of -contrib project for httpclient, that allows people to share their helpers with the community ? There is already such a contrib package, but all the code in that package is distributed as source only. If that is okay with you, feel free to submit your components for inclusion into that package but you will have to re-license it under Apache License v2. Oleg

          People

          • Assignee:
            Unassigned
            Reporter:
            Sami Dalouche
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development