org.linkedin.util-core/src/main/java/org/linkedin/util/reflect/ObjectProxyBuilder.java
@SuppressWarnings("unchecked")
  public static <T> T createProxy(InvocationHandler handler, Class<T> itface)
  {
    if(handler instanceof ObjectProxy)
    {
      ObjectProxy proxy = (ObjectProxy) handler;
      if(!ReflectUtils.isSubClassOrInterfaceOf(proxy.getProxiedObject().getClass(), itface))
        throw new IllegalArgumentException(proxy.getProxiedObject().getClass() + " does not extend " + itface);
    }

    return (T) Proxy.newProxyInstance(itface.getClassLoader(),
                                      new Class<?>[] {itface},
                                      handler);
  }
@SuppressWarnings("unchecked")
  public static <T> T createProxy(InvocationHandler handler, Class<T> itface)
  {
    if(handler instanceof ObjectProxy)
    {
      ObjectProxy proxy = (ObjectProxy) handler;
      if(!ReflectUtils.isSubClassOrInterfaceOf(proxy.getProxiedObject().getClass(), itface))
        throw new IllegalArgumentException(proxy.getProxiedObject().getClass() + " does not extend " + itface);
    }

    return (T) Proxy.newProxyInstance(itface.getClassLoader(),
                                      new Class<?>[] {itface},
                                      handler);
  }
Convenient call which creates a proxy using the handler and the interface. It will also
check that the object bien proxied (if implements <code>ObjectProxy</code>) properly
implement the interface...

@return the proxy (which implement all the interface)