- 
    CSR 
- 
    Resolution: Approved
- 
     P2 P2
- 
    None
- 
        minimal
- 
        Java API
- 
        SE
Summary
A number of small specification clarifications and rewordings to supplement the already approved HTTP Client, JDK-8197565.
Problem
Feedback from a number of sources including, JCK, both internal and external engineers, have identified:
- a number of small deficiencies in the specification that require clarification, and 
- opportunities to simplify the API by removing a superfluous public type and enum value, and 
- opportunities to reword certain targeted sections of text, mainly in WebSocket, to avoid ambiguity thus avoiding misunderstanding. 
Solution
1) From HttpClient.Redirect remove SAME_PROTOCOL and SECURE.
  Replace with NORMAL. Leaving { ALWAYS, NORMAL, NEVER }.  It has
  been observed that the previously named SECURE was not really
  appropriately named and should be renamed to NORMAL, since it will
  likely be suitable for most normal cases. Given the newly named,
  aforementioned, NORMAL, SAME_PROTOCOL appears oddly named,
  possibly confusing, and not likely to be used.
2) Remove WebSocket.MessagePart. This enum was used on the the
  receiving side to indicate whether the delivery of message was
  complete, or not. It is asymmetric with the sending side, which uses a
  simple boolean for this purpose. Additionally, it has been observed
  that handling received messages with a simple boolean significantly
  reduces and simplifies the receiving code logic. Determination of
  messages being delivered as a WHOLE, one of the benefits and the main
  purposes for the aforementioned MessagePart, has proved to not carry
  its own weight.  Note: as part of this review, MessagePart, and
  variants thereof, have been considered and dismissed, on the sending
  side, as they obstruct one of the most common patterns of iterating
  over data and sending it as chunks.
3) Throughout the WebSocket documentation care has been taken to
  avoid ambiguity between websocket messages and the number of
  invocations of the WebSocket.Listener. The number of messages may
  not equal the number of listener invocations, as partial messages may
  be delivered. This has been a source of confusion when folk first
  start using the API.
4) WebSocket does not ( for good reasons ) use the Java SE
  reactive-stream support in java.util.concurrent.Flow, but its
  request ( invocation demand ) is heavily influenced by it, and the
  API can be used to build higher-level Flow's using such. This concept,
  since analogous to Flow ( Subscriber and Subscription), has been
  clarified. These changes touch a lot of documentation, but it has not
  changed semantically.
5) The WebSocket specification around closure has been tightened up and several corner cases clarified. Again, this touches many parts of the spec, but has not changed significantly.
6) Outbound data flow, in the WebSocket API, is pressured by
  CompletableFutures returned by the sendBinary and sendText
  methods. Equivalent have been added to the less-data driven sendPing
  and sendPong methods to prevent outbound saturation.
7) The WebSocket API throws NullPointerException directly from 
  methods where a null value is passed, but completes exceptionally
  returned CompletableFutures in almost all other cases. This is a
  decision that was made to simplify and streamline error handling. The
  HttpClient API exposes significantly less CompletableFutures,
  typically just a single CF from sendAsync, which results in less
  burdensome error handling, therefore throws ( rather than completes
  exceptionally ) when illegal arguments are passed. 
Specification
Specdiff in attached zip file, or browsable online at: http://cr.openjdk.java.net/~chegar/httpclient/supplementary/overview-summary.html
- csr of
- 
                    JDK-8199938 Supplementary minor HTTP Client spec clarifications -           
- Resolved
 
-