You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by de...@apache.org on 2006/02/10 05:04:07 UTC

svn commit: r376538 - in /webservices/axis2/trunk/java/modules/core/src/org/apache/axis2: deployment/DeploymentEngine.java description/AxisOperation.java

Author: deepal
Date: Thu Feb  9 20:04:04 2006
New Revision: 376538

URL: http://svn.apache.org/viewcvs?rev=376538&view=rev
Log:
-fixing module operation adding (control operation) when they engaged to an operation

Modified:
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/DeploymentEngine.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisOperation.java

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/DeploymentEngine.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/DeploymentEngine.java?rev=376538&r1=376537&r2=376538&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/DeploymentEngine.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/DeploymentEngine.java Thu Feb  9 20:04:04 2006
@@ -185,6 +185,7 @@
         Iterator services = serviceList.iterator();
 
         while (services.hasNext()) {
+            ArrayList contolops = new ArrayList();
             AxisService axisService = (AxisService) services.next();
             axisService.setUseDefaultChains(false);
 
@@ -216,7 +217,11 @@
                     AxisModule module = axisConfig.getModule(moduleName);
 
                     if (module != null) {
-                        opDesc.engageModule(module, axisConfig);
+                        ArrayList controlops = opDesc.engageModule(module, axisConfig);
+                        for (int j = 0; j < controlops.size(); j++) {
+                            AxisOperation axisOperation = (AxisOperation) controlops.get(j);
+                            contolops.add(axisOperation);
+                        }
                     } else {
                         throw new DeploymentException(
                                 Messages.getMessage(
@@ -225,6 +230,11 @@
                     }
                 }
             }
+            for (int i = 0; i < contolops.size(); i++) {
+                AxisOperation axisOperation = (AxisOperation) contolops.get(i);
+                axisService.addOperation(axisOperation);
+            }
+            contolops.clear();
         }
 
         axisConfig.addServiceGroup(serviceGroup);

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisOperation.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisOperation.java?rev=376538&r1=376537&r2=376538&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisOperation.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisOperation.java Thu Feb  9 20:04:04 2006
@@ -99,10 +99,10 @@
      * @param moduleref
      * @throws AxisFault
      */
-    public final void engageModule(AxisModule moduleref, AxisConfiguration axisConfig)
+    public final ArrayList engageModule(AxisModule moduleref, AxisConfiguration axisConfig)
             throws AxisFault {
         if (moduleref == null) {
-            return;
+            return null;
         }
 
         boolean needToadd = true;
@@ -118,24 +118,79 @@
                 needToadd = false;
             }
         }
-        // adding control operations
-        ((AxisService) getParent()).addModuleOperations(moduleref, axisConfig);
         PhaseResolver phaseResolver = new PhaseResolver(axisConfig);
         phaseResolver.engageModuleToOperation(this, moduleref);
 
-        HashMap map = moduleref.getOperations();
-        Collection col = map.values();
+        if (needToadd) {
+            engagedModules.add(moduleref);
+        }
+        return addModuleOperations(moduleref, axisConfig, (AxisService) getParent());
+    }
+
 
+    /**
+     * Adds an operation to a service if a module is required to do so.
+     *
+     * @param module
+     */
+    public ArrayList addModuleOperations(AxisModule module, AxisConfiguration axisConfig,
+                                         AxisService service)
+            throws AxisFault {
+        HashMap map = module.getOperations();
+        Collection col = map.values();
+        PhaseResolver phaseResolver = new PhaseResolver(axisConfig);
+        //this arry list is retun , to avoid concurrent modifications , in the deployment engine
+        ArrayList ops = new ArrayList();
         for (Iterator iterator = col.iterator(); iterator.hasNext();) {
-            AxisOperation axisOperation = (AxisOperation) iterator.next();
-            AxisOperation serviceop =
-                    ((AxisService) getParent()).getOperation(axisOperation.getName());
-            phaseResolver.engageModuleToOperation(serviceop, moduleref);
+            AxisOperation axisOperation = copyOperation((AxisOperation) iterator.next());
+            ArrayList wsamappings = axisOperation.getWsamappingList();
+
+            for (int j = 0; j < wsamappings.size(); j++) {
+                Parameter parameter = (Parameter) wsamappings.get(j);
+
+                service.mapActionToOperation((String) parameter.getValue(), axisOperation);
+            }
+            if (service.getOperation(axisOperation.getName()) == null) {
+                // this opration is a control operation.
+                axisOperation.setControlOperation(true);
+                phaseResolver.engageModuleToOperation(axisOperation, module);
+                ops.add(axisOperation);
+            }
         }
-        if (needToadd) {
-            engagedModules.add(moduleref);
+        return ops;
+    }
+
+    /**
+     * Gets a copy from module operation.
+     *
+     * @param axisOperation
+     * @return Returns AxisOperation.
+     * @throws AxisFault
+     */
+    private AxisOperation copyOperation(AxisOperation axisOperation) throws AxisFault {
+        AxisOperation operation =
+                AxisOperationFactory.getOperationDescription(axisOperation.getMessageExchangePattern());
+
+        operation.setMessageReceiver(axisOperation.getMessageReceiver());
+        operation.setName(axisOperation.getName());
+
+        Iterator parameters = axisOperation.getParameters().iterator();
+
+        while (parameters.hasNext()) {
+            Parameter parameter = (Parameter) parameters.next();
+
+            operation.addParameter(parameter);
         }
+
+        operation.setWsamappingList(axisOperation.getWsamappingList());
+        operation.setRemainingPhasesInFlow(axisOperation.getRemainingPhasesInFlow());
+        operation.setPhasesInFaultFlow(axisOperation.getPhasesInFaultFlow());
+        operation.setPhasesOutFaultFlow(axisOperation.getPhasesOutFaultFlow());
+        operation.setPhasesOutFlow(axisOperation.getPhasesOutFlow());
+
+        return operation;
     }
+
 
     /**
      * Creates a new operation context if there is not one already.