package railo.runtime.functions.other; import java.io.IOException; import railo.commons.lang.ClassUtil; import railo.runtime.Component; import railo.runtime.PageContext; import railo.runtime.PageContextImpl; import railo.runtime.exp.FunctionException; import railo.runtime.exp.PageException; import railo.runtime.ext.function.Function; import railo.runtime.op.Caster; import railo.runtime.op.Decision; import railo.runtime.type.util.ListUtil; import railo.transformer.bytecode.util.JavaProxyFactory; public class CreateDynamicProxy implements Function { private static final long serialVersionUID = -1787490871697335220L; public static Object call(PageContext pc , Object oCFC,Object oInterfaces) throws PageException { try { return _call(pc, oCFC, oInterfaces); } catch (IOException e) { throw Caster.toPageException(e); } } public static Object _call(PageContext pc , Object oCFC,Object oInterfaces) throws PageException, IOException { // Component Component cfc; if(oCFC instanceof Component) cfc= (Component)oCFC; else cfc=pc.loadComponent(Caster.toString(oCFC)); // interfaces String[] strInterfaces; if(Decision.isArray(oInterfaces)) { strInterfaces=ListUtil.toStringArray(Caster.toArray(oInterfaces)); } else { String list = Caster.toString(oInterfaces); strInterfaces=ListUtil.listToStringArray(list, ','); } strInterfaces=ListUtil.trimItems(strInterfaces); ClassLoader cl = ((PageContextImpl)pc).getClassLoader(); Class[] interfaces=new Class[strInterfaces.length]; for(int i=0;i<strInterfaces.length;i++){ interfaces[i]=ClassUtil.loadClass(cl, strInterfaces[i]); if(!interfaces[i].isInterface()) throw new FunctionException(pc, "CreateDynamicProxy", 2, "interfaces", "definition ["+strInterfaces[i]+"] is a class and not a interface"); } return JavaProxyFactory.createProxy(pc,cfc, null,interfaces); } }