Chris,

Thanks for the comments. Some responses below:


On 09/08/12 19:15, Chris Hegarty wrote:
Michael,

Looking good, some comments.

1) Why the use of CookieManager, rather than CookieHandler?  I  would
   expect that CookieHandler would be a cleaner API


CookieHandler is a very low level API, which doesn't offer much functionality beyond managing the cookies yourself, which is what you would have to do, if there were no cookie capabilities in the http api. So, I don't know what we would gain from using it.

While CookieManager isn't perfect (and we'd like to suggest a few improvements) it is a higher level API that does take care of cookie management with some common
policies pre-defined.

2) What is the impact on the sendHeader, setBody for HEAD requests?


Ah yes, HEAD needs special treatment - though not with respect to the methods above as HEAD is identical to GET except with respect to any returned response body.

So, we need to clarify that HttpResponse.getContentLength() returns the value of the content-length header in the case of HEAD responses. Also, I think we should
clarify how empty response bodies are treated. Something like:-
- an InputStream that returns EOF on first read
- empty byte[] or ByteBuffer[] with one element that is empty
- HttpResponseHandler calls onBodyPart() once with last=true and an empty ByteBuffer
- Iterator<ByteBuffer> where hasNext() returns false on first call.

3) I think HttpClient could be an interface and move the create method
   to a builder/factory, and make it as immutable as possible ( this
   came up a few times now ).


Right. Am looking into that now.

4) The Filter API looks a little funny, in that filter instances are
   added to the client, while the ByteBufferWrapper instances are
   presumably created by the implementation after registering the
   wrapper class with the filter instance. Probably best/cleaner
   to use the same style. It could also be an interface.


ByteBufferWrapper implementations could be generally useful (eg content encoders/decoders) but each Filter will be associated with zero or one specific ByteBufferWrapper implementation.

Though, perhaps Filter could return ByteBufferWrapper instances rather than the class ...

What do you think the advantage of Filter being an interface is? In that case, implementers would have to implement both methods in all cases. I think there will be many cases where filters are interested in either the request or the response, but not both.

5) ByteBufferWrapper seems a little cluttered with implementation detail
   setSource() nor setWrapper()?? Maybe best to just provide an
   interface.


That comment about setSource() is wrong and needs to be removed. I agree
setWrapper() is implementation detail as it only needs to be called by the implementation.
Maybe it could be package private...

6) Upgrade handler, similar comment to 4. Why not just register an
   instance.


Danny?

7) Exposing the filter list seems a little wrong, given the getter/
   setter style.


We'll look at that again with the builder changes

8) java.net.httpclient.HttpConnectionCache.CachedConnection should
   probably be an interface.


Yes, we were thinking about doing that.

9) How does the cache handle tunnels? endpoint address/proxy/etc


good point. That needs to be clarified.

10) Missing fluent style return from HttpRequest.setRequestBodyLimit


ok

11) Should sendHeaders be specified to allow a null return value. I'm
    thinking about when setSendExpectContinue is set.


Do you mean if a 417 "expectation failed" is received? Yes, in that case it
probably does make sense to return null. It's a slightly awkward special case,
but would have to be documented.

We're trying to handle the normal situation as transparently as possible.
The idea is that a blocking application will just block until
the 100 continue is received, before being allowed to send the body.
An asynchronous application will just not be "called back" to get the body
until the 100 is received.

Thanks
Michael
-Chris.


On 08/08/12 00:09, Michael McMahon wrote:
Hi,

A new revision of the Http client API planned for jdk 8 can be viewed
at the following link

http://cr.openjdk.java.net/~michaelm/httpclient/v0.3/

We would like to review the api on this mailing list.
So, all comments are welcome.

Thanks
Michael McMahon.

Reply via email to