code: @SuppressWarnings("unchecked")
  	private static <T> T createClientProxy(ClassLoader classLoader, Class<T> proxyInterface, final IJsonRpcClient client, final Map<String, String> extraHeaders) {
  		
  		return (T) Proxy.newProxyInstance(classLoader, new Class<?>[]{proxyInterface}, new InvocationHandler() {
  			@Override
  			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  				if (isDeclaringClassAnObject(method)) return proxyObjectMethods(method, proxy, args);
  				
  				final Object arguments = ReflectionUtil.parseArguments(method, args);
  				final String methodName = getMethodName(method);
  				return client.invoke(methodName, arguments, method.getGenericReturnType(), extraHeaders);
  			}
  		});
  	}
docs: Creates a {@link Proxy} of the given {@code proxyInterface}
  that uses the given {@link IJsonRpcClient}.
  
  @param <T>            the proxy type
  @param classLoader    the {@link ClassLoader}
  @param proxyInterface the interface to proxy
  @param client         the {@link JsonRpcHttpClient}
  @param extraHeaders   extra HTTP headers to be added to each response
  @return the proxied interface