public <T> T getInterface(Object thiz, Class<T> iface) throws ScriptException { if (iface == null || !iface.isInterface()) { throw new IllegalArgumentException("interface Class expected"); } AccessControlContext accCtxt = AccessController.getContext(); return iface.cast( Proxy.newProxyInstance( iface.getClassLoader(), new Class[] {iface}, new InterfaceImplementorInvocationHandler(thiz, accCtxt))); }