-
Notifications
You must be signed in to change notification settings - Fork 6k
Closed
Milestone
Description
Description
When generating an Android client (volley library) with swagger-codegen, the compilation failed with:
[javac] Compiling 46 source files to bin/classes
[javac] v1/ApiInvoker.java:448: error: unreported exception UnsupportedEncodingException; must be caught or declared to be thrown
[javac] request = new PostRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener);
[javac] ^
[javac] v1/ApiInvoker.java:453: error: unreported exception UnsupportedEncodingException; must be caught or declared to be thrown
[javac] request = new PostRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener);
[javac] ^
[javac] v1/ApiInvoker.java:462: error: unreported exception UnsupportedEncodingException; must be caught or declared to be thrown
[javac] request = new PutRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener);
[javac] ^
[javac] v1/ApiInvoker.java:467: error: unreported exception UnsupportedEncodingException; must be caught or declared to be thrown
[javac] request = new PutRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener);
[javac] ^
[javac] v1/ApiInvoker.java:476: error: unreported exception UnsupportedEncodingException; must be caught or declared to be thrown
[javac] request = new DeleteRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener);
[javac] ^
[javac] v1/ApiInvoker.java:481: error: unreported exception UnsupportedEncodingException; must be caught or declared to be thrown
[javac] request = new DeleteRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener);
[javac] ^
[javac] v1/ApiInvoker.java:490: error: unreported exception UnsupportedEncodingException; must be caught or declared to be thrown
[javac] request = new PatchRequest(url, headers, contentType, new StringEntity(formParamStr, "UTF-8"), stringRequest, errorListener);
[javac] ^
[javac] v1/ApiInvoker.java:495: error: unreported exception UnsupportedEncodingException; must be caught or declared to be thrown
[javac] request = new PatchRequest(url, headers, contentType, new StringEntity(serialize(body), "UTF-8"), stringRequest, errorListener);
[javac] ^
[javac] Note: v1/ApiInvoker.java uses unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 8 errors
The problem comes from the StringEntity constructor which can throw UnsupportedEncodingException which is not catched nor thrown by the createRequest method.
Swagger-codegen version
2.2.3
Suggest a fix/enhancement
--- a/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache
+++ b/modules/swagger-codegen/src/main/resources/android/libraries/volley/apiInvoker.mustache
@@ -363,24 +363,32 @@ public class ApiInvoker {
}
public String invokeAPI(String host, String path, String method, List<Pair> queryParams, Object body, Map<String, String> headerParams, Map<String, String> formParams, String contentType, String[] authNames) throws ApiException, InterruptedException, ExecutionException, TimeoutException {
- RequestFuture<String> future = RequestFuture.newFuture();
- Request request = createRequest(host, path, method, queryParams, body, headerParams, formParams, contentType, authNames, future, future);
- if(request != null) {
- mRequestQueue.add(request);
- return future.get(connectionTimeout, TimeUnit.SECONDS);
- } else {
- return "no data";
+ try {
+ RequestFuture<String> future = RequestFuture.newFuture();
+ Request request = createRequest(host, path, method, queryParams, body, headerParams, formParams, contentType, authNames, future, future);
+ if(request != null) {
+ mRequestQueue.add(request);
+ return future.get(connectionTimeout, TimeUnit.SECONDS);
+ } else {
+ return "no data";
+ }
+ } catch (UnsupportedEncodingException ex) {
+ throw new ApiException();
}
}
public void invokeAPI(String host, String path, String method, List<Pair> queryParams, Object body, Map<String, String> headerParams, Map<String, String> formParams, String contentType, String[] authNames, Response.Listener<String> stringRequest, Response.ErrorListener errorListener) throws ApiException {
- Request request = createRequest(host, path, method, queryParams, body, headerParams, formParams, contentType, authNames, stringRequest, errorListener);
- if (request != null) {
- mRequestQueue.add(request);
+ try {
+ Request request = createRequest(host, path, method, queryParams, body, headerParams, formParams, contentType, authNames, stringRequest, errorListener);
+ if (request != null) {
+ mRequestQueue.add(request);
+ }
+ } catch (UnsupportedEncodingException ex) {
+ throw new ApiException();
}
}
- public Request<String> createRequest(String host, String path, String method, List<Pair> queryParams, Object body, Map<String, String> headerParams, Map<String, String> formParams, String contentType, String[] authNames, Response.Listener<String> stringRequest, Response.ErrorListener errorListener) throws ApiException {
+ public Request<String> createRequest(String host, String path, String method, List<Pair> queryParams, Object body, Map<String, String> headerParams, Map<String, String> formParams, String contentType, String[] authNames, Response.Listener<String> stringRequest, Response.ErrorListener errorListener) throws ApiException, UnsupportedEncodingException {
StringBuilder b = new StringBuilder();
b.append("?");