snichol 2002/08/29 13:06:13 Modified: java/src/org/apache/soap/providers StatelessEJBProvider.java Log: Clean up: - Remove output to System.out and System.err - Provide more precise and complete exception information - Improve formatting (mainly indentation) of the source Revision Changes Path 1.8 +153 -186 xml-soap/java/src/org/apache/soap/providers/StatelessEJBProvider.java Index: StatelessEJBProvider.java =================================================================== RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/providers/StatelessEJBProvider.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- StatelessEJBProvider.java 28 Aug 2002 18:43:32 -0000 1.7 +++ StatelessEJBProvider.java 29 Aug 2002 20:06:13 -0000 1.8 @@ -59,8 +59,6 @@ import java.io.* ; import java.util.* ; -import javax.servlet.* ; -import javax.servlet.http.* ; import org.apache.soap.* ; import org.apache.soap.rpc.* ; import org.apache.soap.server.* ; @@ -72,231 +70,200 @@ import javax.naming.*; import javax.naming.Context.*; -public class StatelessEJBProvider implements org.apache.soap.util.Provider { - - private DeploymentDescriptor dd ; - private Envelope envelope ; - private Call call ; - private String methodName ; - private String targetObjectURI ; - private HttpServlet servlet ; - private HttpSession session ; - - private javax.naming.Context contxt = null; - private EJBObject remoteObjRef = null; - public static java.lang.String CNTXT_PROVIDER_URL = "iiop://localhost:900"; - public static java.lang.String CNTXT_FACTORY_NAME = "com.ibm.ejs.ns.jndi.CNInitialContextFactory"; - private Vector methodParameters = null; - private String respEncStyle = null; /** - * StatelessEJBProvider constructor comment. + * @author unknown + * @author Scott Nichol ([EMAIL PROTECTED]) */ -public StatelessEJBProvider() { - super(); -} - -private void initialize() throws SOAPException { - - if(contxt == null) { - - java.util.Properties properties = new java.util.Properties(); - properties.put(javax.naming.Context.PROVIDER_URL, CNTXT_PROVIDER_URL); - properties.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, CNTXT_FACTORY_NAME); - try { - contxt = new javax.naming.InitialContext(properties); - } catch (NamingException ne) { - // ErrorListener? - System.out.println("Naming Exception caught during InitialContext creation @ " + CNTXT_PROVIDER_URL); - throw new SOAPException(Constants.FAULT_CODE_SERVER, "Unable to initialize context" ); - } - } +public class StatelessEJBProvider implements org.apache.soap.util.Provider { + private DeploymentDescriptor dd ; + private Envelope envelope ; + private Call call ; + private String methodName ; + private String targetObjectURI ; + + private javax.naming.Context contxt = null; + private EJBObject remoteObjRef = null; + public static java.lang.String CNTXT_PROVIDER_URL = "iiop://localhost:900"; + public static java.lang.String CNTXT_FACTORY_NAME = "com.ibm.ejs.ns.jndi.CNInitialContextFactory"; + + /** + * Default constructor. + */ + public StatelessEJBProvider() { + super(); + } -} + /** + * Initializes the naming context using default properties. + */ + private void initialize() throws SOAPException { + initialize(CNTXT_PROVIDER_URL, CNTXT_FACTORY_NAME); + } - private void initialize(String url, String factory) - throws SOAPException - { - if(contxt == null) - { - java.util.Properties properties = new java.util.Properties(); - - if ((url != null) && (!url.trim().equals(""))) - { - properties.put(javax.naming.Context.PROVIDER_URL, url); - } - if ((factory != null) && (!factory.trim().equals(""))) - { - properties.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, factory); - } + /** + * Initializes the naming context using specified properties, either + * defaults or as specified in the deployment descriptor. + */ + private void initialize(String url, String factory) throws SOAPException { + if (contxt == null) { + java.util.Properties properties = new java.util.Properties(); + if ((url != null) && (!url.trim().equals(""))) { + properties.put(javax.naming.Context.PROVIDER_URL, url); + } + if ((factory != null) && (!factory.trim().equals(""))) { + properties.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, factory); + } - try - { - contxt = new javax.naming.InitialContext(properties); - } - catch (NamingException ne) - { - // ErrorListener? - System.out.println("Naming Exception caught during InitialContext creation @ " + url); - throw new SOAPException(Constants.FAULT_CODE_SERVER, "Unable to initialize context"); - } + try { + contxt = new javax.naming.InitialContext(properties); + } catch (NamingException ne) { + // TODO: ErrorListener? + //System.out.println("Naming Exception caught during InitialContext creation @ " + url); + throw new SOAPException(Constants.FAULT_CODE_SERVER, + "Unable to initialize naming context; URL " + + url + " factory " + factory + ": " + ne, + ne); + } + } } - } -/** - * invoke method comment. - */ -public void invoke(SOAPContext reqContext, SOAPContext resContext) - throws SOAPException { - System.err.println( "=============================================" ); - System.err.println("In TemplateProvider.invoke()" ); - + /** + * Invokes the method. + */ + public void invoke(SOAPContext reqContext, SOAPContext resContext) + throws SOAPException { Parameter ret = null; Object[] args = null; Class[] argTypes = null; - respEncStyle = call.getEncodingStyleURI(); + String methodName = call.getMethodName(); + Vector methodParameters = call.getParams(); + String respEncStyle = call.getEncodingStyleURI(); if (methodParameters != null) { - int parametersCount = methodParameters.size (); - args = new Object[parametersCount]; - argTypes = new Class[parametersCount]; - - for (int i = 0; i < parametersCount; i++) { - Parameter param = (Parameter) methodParameters.elementAt (i); - args[i] = param.getValue (); - argTypes[i] = param.getType (); - - if (respEncStyle == null) { - respEncStyle = param.getEncodingStyleURI (); - } + int parametersCount = methodParameters.size (); + args = new Object[parametersCount]; + argTypes = new Class[parametersCount]; + + for (int i = 0; i < parametersCount; i++) { + Parameter param = (Parameter) methodParameters.elementAt (i); + args[i] = param.getValue (); + argTypes[i] = param.getType (); + + if (respEncStyle == null) { + respEncStyle = param.getEncodingStyleURI (); } + } } - if (respEncStyle == null) { - respEncStyle = Constants.NS_URI_SOAP_ENC; - } + if (respEncStyle == null) + respEncStyle = Constants.NS_URI_SOAP_ENC; try { + Method m = MethodUtils.getMethod(remoteObjRef, methodName, argTypes); + Bean result = new Bean(m.getReturnType(), m.invoke(remoteObjRef, args)); - Method m = MethodUtils.getMethod (remoteObjRef, methodName, argTypes); - Bean result = new Bean (m.getReturnType (), m.invoke (remoteObjRef, args)); - - - if (result.type != void.class) { - ret = new Parameter (RPCConstants.ELEM_RETURN, result.type, - result.value, null); - } - - + if (result.type != void.class) { + ret = new Parameter(RPCConstants.ELEM_RETURN, result.type, + result.value, null); + } } catch (InvocationTargetException e) { - System.err.println("Exception Caught upon method invocation attempt: " + e.getMessage()); - Throwable t = e.getTargetException (); - throw new SOAPException (Constants.FAULT_CODE_SERVER, t.getMessage(), t); - } - catch (Throwable t) { - System.err.println("Exception Caught upon method invocation attempt: " + t.toString()); - throw new SOAPException (Constants.FAULT_CODE_SERVER, t.getMessage(), t); + // TODO: ErrorListener? + //System.err.println("Exception Caught upon method invocation attempt: " + e.getMessage()); + Throwable t = e.getTargetException(); + throw new SOAPException(Constants.FAULT_CODE_SERVER, + "Error in invoked method " + methodName + + ": " + t.getMessage(), + t); + } catch (Throwable t) { + // TODO: ErrorListener? + //System.err.println("Exception Caught upon method invocation attempt: " + t.toString()); + throw new SOAPException(Constants.FAULT_CODE_SERVER, + "Error invoking method " + methodName + + ": " + t.getMessage(), + t); } try { - Response resp = new Response( targetObjectURI, // URI - call.getMethodName(), // Method - (Parameter) ret, // ReturnValue - null, // Params - null, // Header - respEncStyle, // encoding - resContext ); // response soapcontext - not supported yet - Envelope env = resp.buildEnvelope(); - StringWriter sw = new StringWriter(); - env.marshall( sw, call.getSOAPMappingRegistry(), resContext ); - resContext.setRootPart( sw.toString(), Constants.HEADERVAL_CONTENT_TYPE_UTF8); - } - catch( Exception e ) { - if ( e instanceof SOAPException ) throw (SOAPException ) e ; - throw new SOAPException( Constants.FAULT_CODE_SERVER, e.toString() ); - } -} + Response resp = new Response(targetObjectURI, // URI + call.getMethodName(), // Method + (Parameter) ret, // ReturnValue + null, // Params + null, // Header + respEncStyle, // encoding + resContext); // response soapcontext + Envelope env = resp.buildEnvelope(); + StringWriter sw = new StringWriter(); + env.marshall(sw, call.getSOAPMappingRegistry(), resContext); + resContext.setRootPart(sw.toString(), Constants.HEADERVAL_CONTENT_TYPE_UTF8); + } catch( Exception e ) { + if (e instanceof SOAPException) + throw (SOAPException) e; + throw new SOAPException(Constants.FAULT_CODE_SERVER, + "Error creating response: " + e, + e); + } + } -/** - * locate method comment. - */ -public void locate(DeploymentDescriptor dd, - Envelope env, - Call call, - String methodName, - String targetObjectURI, - SOAPContext reqContext) - throws org.apache.soap.SOAPException { - - HttpServlet servlet = (HttpServlet) reqContext.getProperty( Constants.BAG_HTTPSERVLET ); - HttpSession session = (HttpSession) reqContext.getProperty( Constants.BAG_HTTPSESSION ); - - System.err.println( "=============================================" ); - System.err.println( "In TemplateProvider.locate()" ); - System.err.println( "URI: " + targetObjectURI ); - System.err.println( "DD.ServiceClass: " + dd.getServiceClass() ); - System.err.println( "DD.ProviderClass: " + dd.getProviderClass() ); - System.err.println( "Call.MethodName: " + call.getMethodName() ); - - this.dd = dd ; - this.envelope = env ; - this.call = call ; - this.methodName = methodName ; - this.targetObjectURI = targetObjectURI ; - this.servlet = servlet ; - this.session = session ; + /** + * Locates the method. + */ + public void locate(DeploymentDescriptor dd, Envelope env, Call call, + String methodName, String targetObjectURI, + SOAPContext reqContext) throws SOAPException { + this.dd = dd ; + this.envelope = env ; + this.call = call ; + this.methodName = methodName ; + this.targetObjectURI = targetObjectURI ; - // call on a valid method name? - if (!RPCRouter.validCall(dd, call)) { + // call on a valid method name? + if (!RPCRouter.validCall(dd, call)) { throw new SOAPException(Constants.FAULT_CODE_SERVER, "Method '" + call.getMethodName () + "' is not supported."); - } - - Hashtable props = dd.getProps(); + } + Hashtable props = dd.getProps(); + // Initialize the naming context String ContxtProviderURL = (String) props.get("ContextProviderURL"); String ContxtFactoryName = (String) props.get("FullContextFactoryName"); - if ((ContxtProviderURL != null) || (ContxtFactoryName != null)) - initialize(ContxtProviderURL, ContxtFactoryName); + initialize(ContxtProviderURL, ContxtFactoryName); else - initialize(); + initialize(); + // Locate and narrow the EJB String homeInterfaceName = (String) props.get("FullHomeInterfaceName"); if (homeInterfaceName == null) - throw new SOAPException(Constants.FAULT_CODE_SERVER, "Error in Deployment Descriptor Property Settings"); + throw new SOAPException(Constants.FAULT_CODE_SERVER, + "FullHomeInterfaceName must be supplied " + + "in the deployment descriptor"); - // From the Deployment Descriptor get the JNDI lookup name that is inside the "java" element... String jndiName = (String) props.get("JNDIName"); - if ( jndiName == null ) jndiName = dd.getProviderClass(); + if (jndiName == null) + jndiName = dd.getProviderClass(); if ((jndiName != null) && (contxt != null)) { - - try { - - // Use service name to locate EJB home object via the contxt - // EJBHome home = (EJBHome) contxt.lookup(jndiName); - EJBHome home = (EJBHome) PortableRemoteObject.narrow(contxt.lookup(jndiName), Class.forName(homeInterfaceName)); - // call the 'create' method on the EJB home object, and store the - // ref to the EJB object. - Method createMethod = home.getClass().getMethod("create", new Class[0]); - remoteObjRef = (EJBObject) createMethod.invoke((Object) home, new Object[0]); - - } catch (Exception e) { - - System.out.println("Exception caught: " + e.toString()); - throw new SOAPException(Constants.FAULT_CODE_SERVER,"Error in connecting to EJB", e); - } + try { + // Use service name to locate EJB home object via the contxt + // EJBHome home = (EJBHome) contxt.lookup(jndiName); + EJBHome home = (EJBHome) PortableRemoteObject.narrow(contxt.lookup(jndiName), Class.forName(homeInterfaceName)); + // call the 'create' method on the EJB home object, and store the + // ref to the EJB object. + Method createMethod = home.getClass().getMethod("create", new Class[0]); + remoteObjRef = (EJBObject) createMethod.invoke((Object) home, new Object[0]); + } catch (Exception e) { + // TODO: ErrorListener? + //System.out.println("Exception caught: " + e.toString()); + throw new SOAPException(Constants.FAULT_CODE_SERVER, + "Error in locating or narrowing EJB; " + + "name " + jndiName + " interface " + + homeInterfaceName + ": " + e, + e); + } } - - // Once previous steps have been successful, then we take the Call Object - // and extract the method name from it, and any parameters, and store them. - methodName = call.getMethodName(); - methodParameters = call.getParams(); - - -} + } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>