groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Guillaume Laforge <glafo...@gmail.com>
Subject Re: HTTPBuilder & URIBuilder - plus sign will not encoded
Date Sun, 20 Nov 2016 20:33:43 GMT
Thanks a lot for these explanations!

On Sun, Nov 20, 2016 at 8:20 PM, David Clark <plotinussmith@gmail.com>
wrote:

> I haven't used groovy-wslite, so any comparisons may be ignorant on my
> part. The main design goals of http-builder-ng are:
>
> 1) Use modern groovy DSL design (https://www.infoq.com/
> presentations/groovy-dsl-2015). The original HTTPBuilder was nice but
> depended on propertyMissing/methodMissing magic to work.
>
> 2) Support full use of @CompileStatic/@TypeChecked.
>
> 3) Make IDE support natural through using @DelegatesTo everywhere (this
> also makes #2 possible).
>
> 4) Support multiple http clients. Right now both Apache Http Client and
> the native Java HttpURLConnection are fully supported. Adding new http
> clients should hopefully be simple.
>
> 5) Support threading and asynchronous calls safely and with no additional
> work on the part of users of http-builder-ng. Just give it an Executor and
> then use the async variants of the http verbs: getAsync() instead of get(),
> putAsync() instead of put() etc.
>
> 6) Adding new encoders and decoders is very easy.
>
> 7) Configuration should be cummulative and natural. This one is hard to
> describe, but it allows for applications to configure a single instance of
> HttpBuilder with default options and then every request can override or
> inherit those settings without affecting any other request or the single
> HttpBuilder instance.
>
> 8) Support interception of requests and responses to allow for logging,
> metrics, debugging etc.
>
> 9) High performance. We are using http-builder-ng for production
> applications at my job. We have seen cases where http-builder-ng + Apache
> Http Client will overwhelm a server with the load it can generate.
>
> The README and User Guide go into this in more detail.
>
> Taking a quick peek at groovy-wslite:
>
> 1) SOAP and multipart are supported natively by wslite. Adding SOAP
> support to http-builder-ng would mainly involve either using the native xml
> support directly or writing a custom encoder/decoder (should be pretty
> easy) that uses a SOAP library. Mulitpart support is on our list of things
> to do.
>
> 2) wslite allows for using Java 5. http-builder-ng requires Java 8.
>
> 3) wslite uses different classes to support different use cases
> (RESTClient, SOAPClient, etc.). http-builder-ng provides a single class
> that handles everything (HttpBuilder). Extending HttpBuilder is a matter of
> adding new encoders/decoders at runtime.
>
> 4) wslite handles network configuration at the top level. http-builder-ng
> depends upon http clients being configured correctly. This is nice because
> all features of the native clients (HttpURLConnection, Apache Http Client)
> are available. This is bad because you have to know about the features of
> the native clients, some of which are confusing.
>
> Hope this helps.
> On 11/20/2016 09:02 AM, Guillaume Laforge wrote:
>
> I didn't know about NG, David!
>
> These days, I tend to use groovy wslite:
> https://github.com/jwagenleitner/groovy-wslite
>
> What are the pros & cons of http-builder-ng and wslite?
>
> On Sun, Nov 20, 2016 at 3:39 PM, David Clark <plotinussmith@gmail.com>
> wrote:
>
>> Plus sign is legal in URI's so they don't need to get encoded to be legal:
>>
>> http://stackoverflow.com/questions/1547899/which-characters-
>> make-a-url-invalid/1547940#1547940
>> This is complicated by the fact that they are url encoded when part of
>> the query string, but that's not what you are doing here. It sounds to me
>> like the problem is on the server or there some other part of your request
>> that is incorrect.
>>
>> If there is a problem inside HTTPBuilder, you are probably out of luck,
>> that project has been dead for a while.
>>
>> However, I have created a successor to HTTPBuilder called http-builder-ng
>> that is active here:
>>
>> https://github.com/dwclark/http-builder-ng
>>
>> It is NOT a backwards compatible upgrade. When I was examining the
>> original source code I found many threading issues, code duplication, it
>> was imposible to use @TypeChecked/@CompileStatic, and found it hard to
>> integrated different clients inside HTTPBuilder. The result of these
>> frustrations was a ground up re-write. Bug reports/pull requests are
>> encouraged.
>>
>>
>>
>> On 11/20/2016 07:25 AM, Christian Lotz wrote:
>>
>> Hi all,
>> I try to upload files via HTTPBuilder (Groovy Version: 2.4.7 JVM:
>> 1.8.0_40 Vendor: Oracle Corporation OS: Mac OS X). After a couple of test I
>> realized, that filenames containing a plus sign ("+") can't be uploaded.
>> The REST Service responds with HTTP/1.1 400 Bad Request. After some more
>> debugging I think these filenames will not get encoded correctly:
>>
>> uri.path = "/rest/" + objectNamespace + "/" + objectFile.name
>>
>> groovyx.net.http.HTTPBuilder doRequest
>> FINE: PUT http://172.16.29.10/rest/TEST/s*pace%20space.doc* - Filename:
>> space\ space.doc - OK
>>
>> groovyx.net.http.HTTPBuilder doRequest
>> FINE: PUT http://172.16.29.10/rest/TEST/*plus+plus.doc* -Filename
>> plus+plus.doc - ERROR
>>
>> All other "special" characters like spaces, #, &, % or ? will get encoded
>> correctly ...
>>
>> Does anybody know how to resolve this issue?
>>
>> Thanks in advance
>> Paolo
>>
>>
>>
>
>
> --
> Guillaume Laforge
> Apache Groovy committer & PMC Vice-President
> Developer Advocate @ Google Cloud Platform
>
> Blog: http://glaforge.appspot.com/
> Social: @glaforge <http://twitter.com/glaforge> / Google+
> <https://plus.google.com/u/0/114130972232398734985/posts>
>
>
>


-- 
Guillaume Laforge
Apache Groovy committer & PMC Vice-President
Developer Advocate @ Google Cloud Platform

Blog: http://glaforge.appspot.com/
Social: @glaforge <http://twitter.com/glaforge> / Google+
<https://plus.google.com/u/0/114130972232398734985/posts>

Mime
View raw message