title: What exceptions can be thrown by exchange() on WebClient?
body: <p>I've implemented a service which makes ReST calls out to other services to implement part of its functionality. I'm using the reactive <code>WebClient</code> for this, something like:</p>
  
  <pre class="lang-java prettyprint-override"><code>webClient.post()
      .uri(....)
      .contentType(....)
      .accept(....)
      .header(....)
      .syncBody(someRequestObject)
      .exchange()
      .flatMap(someResponseHandler::handleResponse)
      .doOnError(throwable -&gt; {
          // do interesting things depending on throwable
      })
      .retry(1, this::somePredicateDependingOnThrowable);
  </code></pre>
  
  <p>Now... I handle HTTP statuses in <code>someResponseHandler::handleResponse</code>, but what I really want to know is, what <em>other</em> kinds of exception/error to expect from the <code>exchange()</code> - i.e.</p>
  
  <ul>
  <li>what exceptions/errors do I get if I can't connect to the downstream service at all?</li>
  <li>What exceptions/errors do I get if the connection attempt times out?</li>
  <li>What exceptions/errors do I get if I can connect but then the request times out before I get a response?</li>
  </ul>
  
  <p>None of these are HTTP status codes, obviously - but I can't find any documentation to tell me what I can look for. Am I just not looking in the right places? I've had a look through the documentation for the reactive WebClient, and I've had a look through the Reactor Netty Reference Guide, but no luck.</p>
  
  <p>For background, this is important because we do HATEOAS-based service discovery - for some of these exceptions, I want to trigger rediscovery, for some of them, I don't.</p>