swagger-api / swagger-codegen

swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition.
http://swagger.io
Apache License 2.0
16.91k stars 6.03k forks source link

null pointer exception in networkResponse.statusCode #3628

Open pradeepkumarreddyk opened 8 years ago

pradeepkumarreddyk commented 8 years ago

The following is the swagger generated code for android:-

try {
        String localVarResponse = apiInvoker.invokeAPI (basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames);
        if(localVarResponse != null){
           return (Lxlresponse) ApiInvoker.deserialize(localVarResponse, "", Lxlresponse.class);
        } else {
           return null;
        }
      } catch (ApiException ex) {
         throw ex;
      } catch (InterruptedException ex) {
         throw ex;
      } catch (ExecutionException ex) {

         if(ex.getCause() instanceof VolleyError) {

             throw new ApiException(((VolleyError) ex.getCause()).networkResponse.statusCode, ((VolleyError) ex.getCause()).getMessage());
         }
         throw ex;
      } catch (TimeoutException ex) {
         throw ex;
      }
  }

In the above code, at the following line i'm getting null pointer exception, when there is no response from server:-

throw new ApiException(((VolleyError) ex.getCause()).networkResponse.statusCode, ((VolleyError) ex.getCause()).getMessage());

wing328 commented 8 years ago

@pradeepkumarreddyk thanks for reporting the issue. The address it, we need to do a null check for networkResponse before accessing the statusCode. If networkResponse is null, we will pass the status code as 0.

May I know if you've cycle to contribute the enhancement/bug fix?

pradeepkumarreddyk commented 8 years ago

i did not understand. what is cycle to contribute the bug fix ?

wing328 commented 7 years ago

I mean do you have time to contribute the fix.

pradeepkumarreddyk commented 7 years ago

yes, i have time to contribute the fix.

what are the steps i should follow to contribute the fix.

First i need to clone the code, then modify the code to fix the bug, then create a pull request.
am i right ?

On Fri, Oct 14, 2016 at 7:55 AM, wing328 notifications@github.com wrote:

I mean do you have time to contribute the fix.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/swagger-api/swagger-codegen/issues/3628#issuecomment-253693627, or mute the thread https://github.com/notifications/unsubscribe-auth/ATYHCldGFjLYs8wyrdFEhFF3iHj7XIaEks5qzughgaJpZM4JqjJe .

wing328 commented 7 years ago

Yes, you're correct. The following file is a good starting point:

https://github.com/swagger-api/swagger-codegen/blob/1dd9ee39af6c4e2f9c016a94d16ca47a88a9cb0d/modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache#L112-L134

Let us know if you need any help.

pradeepkumarreddyk commented 7 years ago

i have cloned the swagger-codegen code, then i have executed the following command on top level directory to find out the list of files which need modification.

grep -r volleyError.networkResponse *

Output of the above command is as follows :-

modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache: if (volleyError.networkResponse != null) { modules/swagger-codegen/src/main/resources/android/libraries/volley/api.mustache: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/PetApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/StoreApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/StoreApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/StoreApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/StoreApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/StoreApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/StoreApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/StoreApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/StoreApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage()); samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: if (volleyError.networkResponse != null) { samples/client/petstore/android/volley/src/main/java/io/swagger/client/api/UserApi.java: throw new ApiException(volleyError.networkResponse.statusCode, volleyError.getMessage());

=> i did not find even a single instance where null check is not done. Everywhere null check is already done in the code. What should i do ?

On Fri, Oct 14, 2016 at 2:44 PM, wing328 notifications@github.com wrote:

Yes, you're correct. The following file is a good starting point:

https://github.com/swagger-api/swagger-codegen/blob/ 1dd9ee39af6c4e2f9c016a94d16ca47a88a9cb0d/modules/swagger- codegen/src/main/resources/android/libraries/volley/api.mustache#L112-L134

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/swagger-api/swagger-codegen/issues/3628#issuecomment-253749521, or mute the thread https://github.com/notifications/unsubscribe-auth/ATYHCjDm3Cx6u8RQ83goMwwnkIXeYkt_ks5qz0gSgaJpZM4JqjJe .