code: package com.lody.virtual.client.ipc;
  
  import java.lang.reflect.InvocationHandler;
  import java.lang.reflect.Method;
  import java.lang.reflect.Proxy;
  
  /**
   * @author Lody
   */
  
  public class LocalProxyUtils {
  
      /**
       * Generates the Proxy instance for a base object, each IPC call will clean its calling identity.
       * @param interfaceClass interface class
       * @param base base object
       * @return proxy object
       */
      public static <T> T genProxy(Class<T> interfaceClass, final Object base) {
          //noinspection ConstantConditions
          if (true) {
              return (T) base;
          }
          //noinspection unchecked
          return (T) Proxy.newProxyInstance(interfaceClass.getClassLoader(), new Class[]{ interfaceClass }, new InvocationHandler() {
              @Override
              public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                  try {
                      return method.invoke(base, args);
                  } catch (Throwable e) {
                      throw e.getCause() == null ? e : e.getCause();
                  }
              }
          });
      }
  
  }
  