@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); } }
private Type getHeadersType() { Type token = methodParser.returnType(); Type headersType = null; if (TypeUtil.isTypeOrSubTypeOf(token, Single.class)) { token = TypeUtil.getTypeArgument(token); } if (TypeUtil.isTypeOrSubTypeOf(token, RestResponse.class)) { headersType = TypeUtil.getTypeArguments(TypeUtil.getSuperType(token, RestResponse.class))[0]; } return headersType; }
private Type getEntityType() { Type token = methodParser.returnType(); if (TypeUtil.isTypeOrSubTypeOf(token, Single.class) || TypeUtil.isTypeOrSubTypeOf(token, Maybe.class) || TypeUtil.isTypeOrSubTypeOf(token, Observable.class)) { token = TypeUtil.getTypeArgument(token); } if (TypeUtil.isTypeOrSubTypeOf(token, RestResponse.class)) { token = TypeUtil.getSuperType(token, RestResponse.class); token = TypeUtil.getTypeArguments(token)[1]; } // TODO: unwrap OperationStatus a different way? try { if (TypeUtil.isTypeOrSubTypeOf(token, Class.forName("com.microsoft.azure.v2.OperationStatus"))) { token = TypeUtil.getTypeArgument(token); } } catch (Exception ignored) { } return token; }