Initiated by #886, we should clarify whether HttpInputMessage.getBody() is allowed to return null, in particular for ClientHttpResponse implementations. BufferingClientHttpResponseWrapper should then defensively check for a null body before trying to buffer it into a byte array, or we should enforce non-null body values where they can currently be null: specifically, in HttpComponents(Async)ClientHttpResponse which seems to be the only implementation that currently returns null for an empty body to begin with.
According to today's analysis, getBody() was never meant to return null. I've explicitly clarified this on HttpInputMessage as well as HttpOutputMessage, and consequently fixed HttpComponents(Async)ClientHttpResponse to return an empty stream instead of null.
This makes the existing BufferingClientHttpResponseWrapper work without any code changes, never running into an IllegalArgumentException out of StreamUtils now.