public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (Object.class == method.getDeclaringClass()) {
return invokeObjectMethod(method, args);
}
if (wire == null) {
throw new ServiceRuntimeException("No runtime wire is available");
}
InvocationChain chain = getInvocationChain(method, wire);
if (chain == null) {
throw new IllegalArgumentException("No matching operation is found: " + method);
}