Author: jboynes
Date: Mon Mar 20 08:49:08 2006
New Revision: 387244

URL: http://svn.apache.org/viewcvs?rev=387244&view=rev
Log:
precalculate maps during construction to shorten per-request path

Modified:
    
incubator/tuscany/java/sca/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java
    
incubator/tuscany/java/sca/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java

Modified: 
incubator/tuscany/java/sca/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java?rev=387244&r1=387243&r2=387244&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java
 (original)
+++ 
incubator/tuscany/java/sca/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java
 Mon Mar 20 08:49:08 2006
@@ -2,7 +2,9 @@
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
-import javax.wsdl.Part;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import javax.xml.namespace.QName;
 
 import commonj.sdo.helper.TypeHelper;
@@ -18,44 +20,56 @@
 import org.apache.wsdl.WSDLConstants;
 
 import org.apache.tuscany.binding.axis2.util.AxiomHelper;
-import org.apache.tuscany.core.context.AggregateContext;
 import org.apache.tuscany.core.context.EntryPointContext;
 import org.apache.tuscany.model.assembly.EntryPoint;
 
 public class WebServiceEntryPointInOutSyncMessageReceiver extends 
AbstractInOutSyncMessageReceiver {
     public static final String MEP_URL = WSDLConstants.MEP_URI_IN_OUT;
 
-    protected final AggregateContext moduleContext;
-
-    protected final EntryPoint entryPoint;
-    protected final EntryPointContext entryPointContext;
-
-    private final WebServicePortMetaData wsdlPortInfo;
+    private final EntryPointContext entryPointContext;
     private final TypeHelper typeHelper;
     private final ClassLoader classLoader;
-    private final Class<?> serviceInterface;
+    private final Map<String, QName> responseTypeMap;
+    private final Map<String, Method> methodMap;
 
     /**
      * Constructor WebServiceEntryPointInOutSyncMessageReceiver
      *
      * @param entryPoint
-     * @param moduleContext
      * @param context
      * @param wsdlPortInfo
      */
-    public WebServiceEntryPointInOutSyncMessageReceiver(AggregateContext 
moduleContext, EntryPoint entryPoint, EntryPointContext context, 
WebServicePortMetaData wsdlPortInfo) {
-        this.moduleContext = moduleContext;
-        this.entryPoint = entryPoint;
+    public WebServiceEntryPointInOutSyncMessageReceiver(EntryPoint entryPoint, 
EntryPointContext context, WebServicePortMetaData wsdlPortInfo) {
         this.entryPointContext = context;
-        this.wsdlPortInfo = wsdlPortInfo;
+
+        Class<?> serviceInterface = 
entryPoint.getConfiguredService().getService().getServiceContract().getInterface();
+        Method[] methods = serviceInterface.getMethods();
+        Map<String, Method> map = new HashMap<String, Method>(methods.length);
+        for (int i = 0; i < methods.length; i++) {
+            Method method = methods[i];
+            map.put(method.getName(), method);
+        }
+
+        // initialize maps
+        List<WebServiceOperationMetaData> operations = 
wsdlPortInfo.getAllOperationMetaData();
+        responseTypeMap = new HashMap<String, QName>(operations.size());
+        methodMap = new HashMap<String, Method>(operations.size());
+        for (WebServiceOperationMetaData operation : operations) {
+            String opName = 
operation.getBindingOperation().getOperation().getName();
+            QName qname = operation.getOutputPart(0).getElementName();
+            responseTypeMap.put(opName, qname);
+
+            Method method = map.get(opName);
+            methodMap.put(opName,method);
+        }
+
         typeHelper = 
entryPoint.getAggregate().getAssemblyModelContext().getTypeHelper();
         classLoader = 
entryPoint.getAggregate().getAssemblyModelContext().getApplicationResourceLoader().getClassLoader();
-        serviceInterface = 
entryPoint.getConfiguredService().getService().getServiceContract().getInterface();
     }
 
     public void invokeBusinessLogic(MessageContext msgContext, MessageContext 
outMsgContext) throws AxisFault {
         // set application classloader onto the thread
-        ClassLoader ccl = Thread.currentThread().getContextClassLoader();
+        ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
         try {
             Thread.currentThread().setContextClassLoader(classLoader);
 
@@ -67,16 +81,9 @@
             OMElement requestOM = 
msgContext.getEnvelope().getBody().getFirstElement();
             Object[] args = AxiomHelper.toObjects(typeHelper, requestOM);
 
-            // map the operation and arguments to the service method
-            Class<?>[] argsClazz = new Class[args.length];
-            for (int i = args.length - 1; i > -1; --i) {
-                argsClazz[i] = args[i].getClass();
-
-            }
-            Method operationMethod = 
serviceInterface.getMethod(axisOperationName, argsClazz);
-
             // invoke the proxy's InvocationHandler
             // FIXME we should be invoking the Tuscany pipeline rather than 
the proxy
+            Method operationMethod = methodMap.get(axisOperationName);
             InvocationHandler handler = (InvocationHandler) 
entryPointContext.getImplementationInstance();
             Object response = handler.invoke(null, operationMethod, args);
 
@@ -86,7 +93,7 @@
             SOAPBody soapbody = soapenv.getBody();
 
             // serialize the invocation respose into the message
-            QName responseTypeQN = 
getResponseTypeName(operationMethod.getName());
+            QName responseTypeQN = responseTypeMap.get(axisOperationName);
             OMElement responseOM = AxiomHelper.toOMElement(typeHelper, new 
Object[]{response}, responseTypeQN);
             soapbody.addChild(responseOM);
 
@@ -99,15 +106,7 @@
             e.printStackTrace();
             throw new AxisFault("Error creating DataObject from Soapenvelope. 
" + e.getClass() + ' ' + e.getMessage(), e);
         } finally {
-            Thread.currentThread().setContextClassLoader(ccl);
+            Thread.currentThread().setContextClassLoader(oldCl);
         }
     }
-
-    protected QName getResponseTypeName(String operationName) {
-        WebServiceOperationMetaData op = 
wsdlPortInfo.getOperationMetaData(operationName);
-        Part part = op.getOutputPart(0);
-        return part.getElementName();
-    }
-
-
 }

Modified: 
incubator/tuscany/java/sca/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java?rev=387244&r1=387243&r2=387244&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java
 (original)
+++ 
incubator/tuscany/java/sca/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java
 Mon Mar 20 08:49:08 2006
@@ -118,7 +118,6 @@
                         false);
 
                 WebServiceEntryPointInOutSyncMessageReceiver msgrec = new 
WebServiceEntryPointInOutSyncMessageReceiver(
-                        moduleContext,
                         entryPoint,
                         (EntryPointContext) entryPointContext,
                         wsdlPortInfo);


Reply via email to