1 57 58 package org.apache.soap.providers ; 59 60 import java.io.* ; 61 import javax.servlet.* ; 62 import javax.servlet.http.* ; 63 import org.apache.soap.* ; 64 import org.apache.soap.rpc.* ; 65 import org.apache.soap.server.* ; 66 import org.apache.soap.server.http.* ; 67 import org.apache.soap.util.* ; 68 69 public class RPCJavaProvider implements Provider { 70 protected DeploymentDescriptor dd ; 71 protected Envelope envelope ; 72 protected Call call ; 73 protected String methodName ; 74 protected String targetObjectURI ; 75 protected HttpServlet servlet ; 76 protected HttpSession session ; 77 78 protected Object targetObject ; 79 80 public void locate( DeploymentDescriptor dd, 81 Envelope env, 82 Call call, 83 String methodName, 84 String targetObjectURI, 85 SOAPContext reqContext ) 86 throws SOAPException { 87 88 HttpServlet servlet = (HttpServlet) reqContext.getProperty( Constants.BAG_HTTPSERVLET ); 89 HttpSession session = (HttpSession) reqContext.getProperty( Constants.BAG_HTTPSESSION ); 90 91 this.dd = dd ; 92 this.envelope = env ; 93 this.call = call ; 94 this.methodName = methodName ; 95 this.targetObjectURI = targetObjectURI ; 96 this.servlet = servlet ; 97 this.session = session ; 98 99 ServletConfig config = null ; 100 ServletContext context = null ; 101 102 if ( servlet != null ) config = servlet.getServletConfig(); 103 if ( config != null ) context = config.getServletContext (); 104 105 ServiceManager serviceManager = 106 ServerHTTPUtils.getServiceManagerFromContext (context); 107 108 if (!RPCRouter.validCall (dd, call)) { 111 throw new SOAPException (Constants.FAULT_CODE_SERVER, 112 "Method '" + call.getMethodName () + 113 "' is not supported."); 114 } 115 116 targetObject = ServerHTTPUtils.getTargetObject (serviceManager, 118 dd, targetObjectURI, 119 servlet, session, 120 reqContext, 121 context); 122 }; 123 124 125 public void invoke(SOAPContext reqContext, SOAPContext resContext) 126 throws SOAPException { 127 try { 129 Response resp = RPCRouter.invoke( dd, call, targetObject, 130 reqContext, resContext ); 131 Envelope env = resp.buildEnvelope(); 132 StringWriter sw = new StringWriter(); 133 env.marshall( sw, call.getSOAPMappingRegistry(), resContext ); 134 resContext.setRootPart( sw.toString(), Constants.HEADERVAL_CONTENT_TYPE_UTF8); 135 } 136 catch( Exception e ) { 137 if ( e instanceof SOAPException ) throw (SOAPException ) e ; 138 throw new SOAPException( Constants.FAULT_CODE_SERVER, e.toString() ); 139 } 140 }; 141 }; 142 | Popular Tags |