4343import java .util .List ;
4444import java .util .Locale ;
4545import java .util .Map ;
46+ import java .util .Objects ;
4647import java .util .Scanner ;
4748
4849import javax .annotation .Nonnull ;
@@ -100,18 +101,13 @@ public class CoreHttpProvider implements IHttpProvider<Request> {
100101 */
101102 public CoreHttpProvider (@ Nonnull final ISerializer serializer ,
102103 @ Nonnull final ILogger logger ,
103- @ Nullable final OkHttpClient httpClient ) {
104- if (httpClient == null ) {
105- throw new NullPointerException ("httpClient" );
106- } else if (serializer == null ) {
107- throw new NullPointerException ("serializer" );
108- } else if (logger == null ) {
109- throw new NullPointerException ("logger" );
110- } else {
111- this .serializer = serializer ;
112- this .logger = logger ;
113- this .corehttpClient = httpClient ;
114- }
104+ @ Nonnull final OkHttpClient httpClient ) {
105+ Objects .requireNonNull (logger , "parameter logger cannot be null" );
106+ Objects .requireNonNull (serializer , "parameter serializer cannot be null" );
107+ Objects .requireNonNull (httpClient , "parameter httpClient cannot be null" );
108+ this .serializer = serializer ;
109+ this .logger = logger ;
110+ this .corehttpClient = httpClient ;
115111 }
116112
117113 /**
@@ -135,7 +131,7 @@ public ISerializer getSerializer() {
135131 * @return a future with the result
136132 */
137133 @ Override
138- @ Nullable
134+ @ Nonnull
139135 public <Result , Body > java .util .concurrent .CompletableFuture <Result > sendAsync (@ Nonnull final IHttpRequest request ,
140136 @ Nonnull final Class <Result > resultClass ,
141137 @ Nullable final Body serializable ) {
@@ -157,13 +153,13 @@ public <Result, Body> java.util.concurrent.CompletableFuture<Result> sendAsync(@
157153 * @return a future with the result
158154 * @throws ClientException this exception occurs if the request was unable to complete for any reason
159155 */
160- @ Nullable
156+ @ Nonnull
161157 public <Result , BodyType , DeserializeType > java .util .concurrent .CompletableFuture <Result > sendAsync (@ Nonnull final IHttpRequest request ,
162158 @ Nonnull final Class <Result > resultClass ,
163159 @ Nullable final BodyType serializable ,
164- @ Nonnull final IStatefulResponseHandler <Result , DeserializeType > handler )
160+ @ Nullable final IStatefulResponseHandler <Result , DeserializeType > handler )
165161 throws ClientException {
166- return sendFutureRequestInternal (request ,
162+ return sendRequestAsyncInternal (request ,
167163 resultClass ,
168164 serializable ,
169165 handler );
@@ -206,7 +202,7 @@ public <Result, Body> Result send(@Nonnull final IHttpRequest request,
206202 public <Result , Body , DeserializeType > Result send (@ Nonnull final IHttpRequest request ,
207203 @ Nonnull final Class <Result > resultClass ,
208204 @ Nullable final Body serializable ,
209- @ Nonnull final IStatefulResponseHandler <Result , DeserializeType > handler ) throws ClientException {
205+ @ Nullable final IStatefulResponseHandler <Result , DeserializeType > handler ) throws ClientException {
210206 return sendRequestInternal (request , resultClass , serializable , handler );
211207 }
212208 /**
@@ -344,8 +340,8 @@ public MediaType contentType() {
344340 * @return the result from the request
345341 * @throws ClientException an exception occurs if the request was unable to complete for any reason
346342 */
347- @ Nullable
348- private <Result , Body , DeserializeType > java .util .concurrent .CompletableFuture <Result > sendFutureRequestInternal (@ Nonnull final IHttpRequest request ,
343+ @ Nonnull
344+ private <Result , Body , DeserializeType > java .util .concurrent .CompletableFuture <Result > sendRequestAsyncInternal (@ Nonnull final IHttpRequest request ,
349345 @ Nonnull final Class <Result > resultClass ,
350346 @ Nullable final Body serializable ,
351347 @ Nullable final IStatefulResponseHandler <Result , DeserializeType > handler )
@@ -389,6 +385,7 @@ private <Result, Body, DeserializeType> Result processResponse(final Response re
389385 final Class <Result > resultClass ,
390386 final Body serializable ,
391387 final IStatefulResponseHandler <Result , DeserializeType > handler ) {
388+ if (response == null ) return null ;
392389 final ResponseBody body = response .body ();
393390 try {
394391 InputStream in = null ;
@@ -412,7 +409,7 @@ private <Result, Body, DeserializeType> Result processResponse(final Response re
412409 request , response , this .serializer , this .logger );
413410 }
414411
415- if (response .code () >= HttpResponseCode .HTTP_CLIENT_ERROR ) {
412+ if (response .code () >= HttpResponseCode .HTTP_CLIENT_ERROR && body != null ) {
416413 logger .logDebug ("Handling error response" );
417414 in = body .byteStream ();
418415 handleErrorResponse (request , serializable , response );
@@ -431,22 +428,23 @@ private <Result, Body, DeserializeType> Result processResponse(final Response re
431428 return handleEmptyResponse (responseHeaders , resultClass );
432429 }
433430
434- in = new BufferedInputStream (body .byteStream ());
435-
436431 if (body == null || body .contentLength () == 0 )
437432 return null ;
438433
439- if (body .contentType () != null && body .contentType ().subtype ().contains ("json" )
434+ in = new BufferedInputStream (body .byteStream ());
435+
436+ final MediaType contentType = body .contentType ();
437+ if (contentType != null && contentType .subtype ().contains ("json" )
440438 && resultClass != InputStream .class ) {
441439 logger .logDebug ("Response json" );
442440 return handleJsonResponse (in , responseHeaders , resultClass );
443441 } else if (resultClass == InputStream .class ) {
444442 logger .logDebug ("Response binary" );
445443 isBinaryStreamInput = true ;
446444 return (Result ) handleBinaryStream (in );
447- } else if (body . contentType () != null && resultClass != InputStream .class &&
448- body . contentType () .type ().contains ("text" ) &&
449- body . contentType () .subtype ().contains ("plain" )) {
445+ } else if (contentType != null && resultClass != InputStream .class &&
446+ contentType .type ().contains ("text" ) &&
447+ contentType .subtype ().contains ("plain" )) {
450448 return handleRawResponse (in , resultClass );
451449 } else {
452450 return null ;
@@ -459,7 +457,7 @@ private <Result, Body, DeserializeType> Result processResponse(final Response re
459457 }catch (IOException e ) {
460458 logger .logError (e .getMessage (), e );
461459 }
462- if ( response != null ) response .close ();
460+ response .close ();
463461 }
464462 }
465463 } catch (final GraphServiceException ex ) {
0 commit comments