001 package railo.runtime.net.rpc.server; 002 003 import java.lang.reflect.Method; 004 005 import javax.xml.rpc.encoding.TypeMapping; 006 007 import org.apache.axis.MessageContext; 008 import org.apache.axis.providers.java.RPCProvider; 009 010 import railo.runtime.Component; 011 import railo.runtime.PageContext; 012 import railo.runtime.exp.PageException; 013 import railo.runtime.net.rpc.AxisCaster; 014 015 public final class ComponentProvider extends RPCProvider { 016 017 public static final String PAGE_CONTEXT = PageContext.class.getName(); 018 public static final String COMPONENT = Component.class.getName(); 019 020 021 /** 022 * @see org.apache.axis.providers.java.RPCProvider#invokeMethod(org.apache.axis.MessageContext, java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) 023 */ 024 protected Object invokeMethod(MessageContext mc, Method method, Object trg, Object[] args) throws Exception { 025 PageContext pc=(PageContext) mc.getProperty(Constants.PAGE_CONTEXT); 026 Component c= (Component) mc.getProperty(Constants.COMPONENT); 027 028 RPCServer server = RPCServer.getInstance(pc.getId(),pc.getServletContext()); 029 TypeMapping tm = server.getEngine().getTypeMappingRegistry().getDefaultTypeMapping(); 030 031 return AxisCaster.toAxisType(tm,c.call(pc,method.getName(),toRailoType(pc,args)),null); 032 } 033 034 private Object[] toRailoType(PageContext pc,Object[] args) throws PageException { 035 Object[] trgs=new Object[args.length]; 036 for(int i=0;i<trgs.length;i++) { 037 trgs[i]=AxisCaster.toRailoType(pc,args[i]); 038 } 039 return trgs; 040 } 041 042 043 }