4848
4949import java .io .BufferedReader ;
5050import java .io .Closeable ;
51+ import java .io .EOFException ;
5152import java .io .IOException ;
5253import java .io .InputStream ;
5354import java .io .InputStreamReader ;
5455import java .io .OutputStream ;
56+ import java .net .ConnectException ;
5557import java .net .HttpURLConnection ;
58+ import java .net .NoRouteToHostException ;
5659import java .net .ProtocolException ;
60+ import java .net .SocketException ;
5761import java .net .SocketTimeoutException ;
5862import java .net .URL ;
63+ import java .net .UnknownHostException ;
5964import java .util .Date ;
6065import java .util .HashMap ;
6166import java .util .List ;
6671import javax .annotation .Nullable ;
6772import javax .net .ssl .HttpsURLConnection ;
6873import javax .net .ssl .SSLContext ;
74+ import javax .net .ssl .SSLException ;
6975import javax .net .ssl .SSLSocketFactory ;
7076
7177import io .opentelemetry .api .trace .Span ;
@@ -313,7 +319,7 @@ private static HttpRequest constructHttpRequest(@NonNull HttpClient.HttpMethod h
313319 * @return The converted string
314320 * @throws IOException Thrown when failing to access inputStream stream.
315321 */
316- private String convertStreamToString (final InputStream inputStream ) throws ClientException {
322+ private String convertStreamToString (final InputStream inputStream ) throws IOException {
317323 try {
318324 final BufferedReader reader = new BufferedReader (new InputStreamReader (inputStream ,
319325 AuthenticationConstants .CHARSET_UTF8 ));
@@ -326,8 +332,6 @@ private String convertStreamToString(final InputStream inputStream) throws Clien
326332 }
327333
328334 return stringBuilder .toString ();
329- } catch (IOException e ) {
330- throw ConnectionError .FAILED_TO_READ_FROM_INPUT_STREAM .getClientException (e );
331335 } finally {
332336 safeCloseStream (inputStream );
333337 }
@@ -353,10 +357,17 @@ private static void safeCloseStream(final Closeable stream) {
353357 }
354358
355359 private HttpResponse executeHttpSend (HttpRequest request , Consumer <HttpResponse > completionCallback ) throws ClientException {
356- final HttpURLConnection urlConnection = setupConnection (request );
357-
358- sendRequest (urlConnection , request .getRequestContent (), request .getRequestHeaders ().get (HttpConstants .HeaderField .CONTENT_TYPE ));
360+ try {
361+ final HttpURLConnection urlConnection = setupConnection (request );
362+ sendRequest (urlConnection , request .getRequestContent (), request .getRequestHeaders ().get (HttpConstants .HeaderField .CONTENT_TYPE ));
363+ return getHttpResponse (completionCallback , urlConnection );
364+ } catch (final IOException e ) {
365+ throw ConnectionError .getClientException (e );
366+ }
367+ }
359368
369+ private HttpResponse getHttpResponse (Consumer <HttpResponse > completionCallback ,
370+ HttpURLConnection urlConnection ) throws IOException {
360371 InputStream responseStream = null ;
361372 HttpResponse response = null ;
362373 try {
@@ -366,18 +377,13 @@ private HttpResponse executeHttpSend(HttpRequest request, Consumer<HttpResponse>
366377 // SocketTimeoutExcetion is thrown when connection timeout happens. For connection
367378 // timeout, we want to retry once. Throw the exception to the upper layer, and the
368379 // upper layer will handle the retry.
369- throw ConnectionError . CONNECTION_TIMEOUT . getClientException ( e ) ;
380+ throw e ;
370381 } catch (final IOException ioException ) {
371382 // 404, for example, will generate an exception. We should catch it.
372383 responseStream = urlConnection .getErrorStream ();
373384 }
374385
375- final int statusCode ;
376- try {
377- statusCode = urlConnection .getResponseCode ();
378- } catch (IOException e ) {
379- throw ConnectionError .FAILED_TO_GET_RESPONSE_CODE .getClientException (e );
380- }
386+ final int statusCode = urlConnection .getResponseCode ();
381387
382388 final Date date = new Date (urlConnection .getDate ());
383389
@@ -401,12 +407,12 @@ private HttpResponse executeHttpSend(HttpRequest request, Consumer<HttpResponse>
401407 );
402408
403409 span .setAttribute (
404- com . microsoft . identity . common . java . opentelemetry . AttributeName .ccs_request_id .name (),
410+ AttributeName .ccs_request_id .name (),
405411 response .getHeaderValue (XMS_CCS_REQUEST_ID , 0 )
406412 );
407413
408414 span .setAttribute (
409- com . microsoft . identity . common . java . opentelemetry . AttributeName .ccs_request_sequence .name (),
415+ AttributeName .ccs_request_sequence .name (),
410416 response .getHeaderValue (XMS_CCS_REQUEST_SEQUENCE , 0 )
411417 );
412418 }
@@ -419,7 +425,6 @@ private HttpResponse executeHttpSend(HttpRequest request, Consumer<HttpResponse>
419425 AttributeName .http_status_code .name (),
420426 response .getStatusCode ()
421427 );
422-
423428 } finally {
424429 completionCallback .accept (response );
425430 safeCloseStream (responseStream );
@@ -428,14 +433,9 @@ private HttpResponse executeHttpSend(HttpRequest request, Consumer<HttpResponse>
428433 return response ;
429434 }
430435
431- private HttpURLConnection setupConnection (HttpRequest request ) throws ClientException {
436+ private HttpURLConnection setupConnection (HttpRequest request ) throws IOException {
432437 final String methodName = ":setupConnection" ;
433- final HttpURLConnection urlConnection ;
434- try {
435- urlConnection = HttpUrlConnectionFactory .createHttpURLConnection (request .getRequestUrl ());
436- } catch (IOException e ) {
437- throw ConnectionError .FAILED_TO_OPEN_CONNECTION .getClientException (e );
438- }
438+ final HttpURLConnection urlConnection = HttpUrlConnectionFactory .createHttpURLConnection (request .getRequestUrl ());
439439
440440 // Apply request headers and update the headers with default attributes first
441441 final Set <Map .Entry <String , String >> headerEntries = request .getRequestHeaders ().entrySet ();
@@ -454,12 +454,7 @@ private HttpURLConnection setupConnection(HttpRequest request) throws ClientExce
454454 Logger .warn (TAG + methodName , "gets a request from an unexpected protocol: " + request .getRequestUrl ().getProtocol ());
455455 }
456456
457- try {
458- urlConnection .setRequestMethod (request .getRequestMethod ());
459- } catch (ProtocolException e ) {
460- throw ConnectionError .FAILED_TO_SET_REQUEST_METHOD .getClientException (e );
461- }
462-
457+ urlConnection .setRequestMethod (request .getRequestMethod ());
463458 urlConnection .setConnectTimeout (getConnectTimeoutMs ());
464459 urlConnection .setReadTimeout (getReadTimeoutMs ());
465460 urlConnection .setInstanceFollowRedirects (true );
@@ -479,7 +474,7 @@ private int getConnectTimeoutMs() {
479474
480475 private static void sendRequest (@ NonNull final HttpURLConnection connection ,
481476 final byte [] contentRequest ,
482- final String requestContentType ) throws ClientException {
477+ final String requestContentType ) throws IOException {
483478 if (contentRequest == null ) {
484479 return ;
485480 }
@@ -497,8 +492,6 @@ private static void sendRequest(@NonNull final HttpURLConnection connection,
497492 try {
498493 out = connection .getOutputStream ();
499494 out .write (contentRequest );
500- } catch (IOException e ) {
501- throw ConnectionError .FAILED_TO_WRITE_TO_OUTPUT_STREAM .getClientException (e );
502495 } finally {
503496 safeCloseStream (out );
504497 }
0 commit comments