@Override public Object invoke(Object proxy, final Method method, Object[] args) { try { SwaggerMethodParser methodParser = null; HttpRequest request = null; if (method.isAnnotationPresent(ResumeOperation.class)) { OperationDescription opDesc = (OperationDescription) args[0]; Method resumeMethod = null; Method[] methods = method.getDeclaringClass().getMethods(); for (Method origMethod : methods) { if (origMethod.getName().equals(opDesc.methodName())) { resumeMethod = origMethod; break; } } methodParser = methodParser(resumeMethod); request = createHttpRequest(opDesc, methodParser, args); final Type returnType = methodParser.returnType(); return handleResumeOperation(request, opDesc, methodParser, returnType); } else { methodParser = methodParser(method); request = createHttpRequest(methodParser, args); final Single<HttpResponse> asyncResponse = sendHttpRequestAsync(request); final Type returnType = methodParser.returnType(); return handleAsyncHttpResponse(request, asyncResponse, methodParser, returnType); } } catch (Exception e) { throw Exceptions.propagate(e); } }