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 @Override 022 protected Object invokeMethod(MessageContext mc, Method method, Object trg, Object[] args) throws Exception { 023 PageContext pc=(PageContext) mc.getProperty(Constants.PAGE_CONTEXT); 024 Component c= (Component) mc.getProperty(Constants.COMPONENT); 025 026 RPCServer server = RPCServer.getInstance(pc.getId(),pc.getServletContext()); 027 TypeMapping tm = server.getEngine().getTypeMappingRegistry().getDefaultTypeMapping(); 028 029 return AxisCaster.toAxisType(tm,c.call(pc,method.getName(),toRailoType(pc,args)),null); 030 } 031 032 private Object[] toRailoType(PageContext pc,Object[] args) throws PageException { 033 Object[] trgs=new Object[args.length]; 034 for(int i=0;i<trgs.length;i++) { 035 trgs[i]=AxisCaster.toRailoType(pc,args[i]); 036 } 037 return trgs; 038 } 039 040 041 }