public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		if (equalsMethod(method)) {
			return false;
		}
		if (toString(method)) {
			return "[vraptor-client] proxy for " + interfaceName(proxy);
		}
		RestMethod restMethod = cache.get(method);
		try {
			long time = System.currentTimeMillis();
			final String httpResult = restMethod.invoke(restClient, args);
			if (logger.isDebugEnabled()) {
				time = System.currentTimeMillis() - time;
				logger.debug(String.format("Method %s executed in %d ms,", restMethod.toString(), time));
			}
			if (logger.isDebugEnabled()) {
				time = System.currentTimeMillis();
			}

			Object result = parser.parse(httpResult, method.getGenericReturnType());
			if (logger.isDebugEnabled()) {
				time = System.currentTimeMillis() - time;
				logger.debug(String.format("%s parsed in %d ms", result.getClass().getName(), time));
			}
			return result;
		} catch (Throwable e) {
			return parser.dealWith(e, method, restMethod);
		}
	}