You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by de...@apache.org on 2005/05/19 11:25:30 UTC

svn commit: r170897 - in /webservices/axis/trunk/java/modules/core: src/org/apache/axis/engine/ src/org/apache/axis/handlers/ src/org/apache/axis/phaseresolver/ test/org/apache/axis/phaserule/

Author: deepal
Date: Thu May 19 02:25:28 2005
New Revision: 170897

URL: http://svn.apache.org/viewcvs?rev=170897&view=rev
Log:
removed all the handler resolution logic form PhaseMeta and PhaseHolder and added them to Phase class. And I had to take some fact into consideration on that and will send a mail soon :)

Modified:
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/Handler.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/Phase.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/AbstractHandler.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseHolder.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseMetadata.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseResolver.java
    webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/InvalidPhaseRuleTest.java
    webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/PhaseRuleTest.java
    webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/PreDispatchPhaseRuleTest.java

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/Handler.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/Handler.java?rev=170897&r1=170896&r2=170897&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/Handler.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/Handler.java Thu May 19 02:25:28 2005
@@ -48,7 +48,7 @@
      */
     public void invoke(MessageContext msgContext) throws AxisFault;
 
-  
+
     /**
      * Method getName
      *
@@ -70,4 +70,12 @@
      * @throws AxisFault
      */
     public void cleanup() throws AxisFault;
+
+    /**
+     * To get the phaseRule of a handler it is required to get the HnadlerDescription of the handler
+     * so the argumnet pass when it call return as HnadlerDescription
+     *
+     * @return
+     */
+    public HandlerDescription getHandlerDesc();
 }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/Phase.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/Phase.java?rev=170897&r1=170896&r2=170897&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/Phase.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/Phase.java Thu May 19 02:25:28 2005
@@ -15,19 +15,21 @@
 */
 package org.apache.axis.engine;
 
-import java.util.ArrayList;
-
 import org.apache.axis.context.MessageContext;
+import org.apache.axis.description.HandlerDescription;
+import org.apache.axis.phaseresolver.PhaseException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.util.ArrayList;
+
 /**
  * <p>This is Phase, a orderd collection of Handlers.
  * seems this is Handler Chain with order.</p>
  * Should this exttends Hanlders?
  */
 public class Phase {
- 
+
     /**
      * Field phaseName
      */
@@ -45,6 +47,54 @@
 
     private int indexOfHandlerToExecute = 0;
 
+
+    /**
+     * to keet info about phase first handler
+     */
+    private Handler phaseFirst = null;
+
+    /**
+     * Field phasefirstset
+     */
+    private boolean phasefirstset;
+
+    /**
+     * to keet info about phase last handler
+     */
+    private Handler phaseLast = null;
+
+    /**
+     * Field phaselastset
+     */
+    private boolean phaselastset;
+
+    /**
+     * Field BOTH_BEFORE_AFTER
+     */
+    private static final int BOTH_BEFORE_AFTER = 0;
+
+    /**
+     * Field BEFORE
+     */
+    private static final int BEFORE = 1;
+
+    /**
+     * Field AFTER
+     */
+    private static final int AFTER = 2;
+
+    /**
+     * Field ANYWHERE
+     */
+    private static final int ANYWHERE = 3;
+
+    /**
+     * this is want if the phaseFirst and phaseLst same hanlder
+     * that is for this phase there is only one phase
+     */
+    private boolean isonehanlder;
+
+
     /**
      * Constructor Phase
      *
@@ -53,7 +103,6 @@
     public Phase(String phaseName) {
         handlers = new ArrayList();
         this.phaseName = phaseName;
-
     }
 
     /**
@@ -86,22 +135,43 @@
      * @throws AxisFault
      */
     public void invoke(MessageContext msgctx) throws AxisFault {
-            while (indexOfHandlerToExecute < handlers.size()) {
-                if(msgctx.isPaused()){
-                    break;
-                }else{
-                    Handler handler = (Handler) handlers.get(indexOfHandlerToExecute);
-                    if (handler != null) {
-                        log.info("Invoke the Handler " + handler.getName()
-                                + "with in the Phase " + phaseName);
-                        handler.invoke(msgctx);
-                        //This line should be after the invoke as if the invocation failed this handlers is takn care of and 
-                        //no need to revoke agien
-                        //         executionStack.push(handler);
-                        indexOfHandlerToExecute++;
-                    }
+        //If phase first Hnadler is there then it should run first
+        if (phaseFirst != null) {
+            if (msgctx.isPaused()) {
+                return;
+            } else {
+                log.info("Invoke the Phase first handler " + phaseFirst.getName()
+                        + "with in the Phase " + phaseName);
+                phaseFirst.invoke(msgctx);
+            }
+        }
+        //Invoking the rest of handler except phaseFirst and phaseLast
+        while (indexOfHandlerToExecute < handlers.size()) {
+            if (msgctx.isPaused()) {
+                break;
+            } else {
+                Handler handler = (Handler) handlers.get(indexOfHandlerToExecute);
+                if (handler != null) {
+                    log.info("Invoke the Handler " + handler.getName()
+                            + "with in the Phase " + phaseName);
+                    handler.invoke(msgctx);
+                    //This line should be after the invoke as if the invocation failed this handlers is takn care of and
+                    //no need to revoke agien
+                    //         executionStack.push(handler);
+                    indexOfHandlerToExecute++;
                 }
             }
+        }
+        //If phase last handler is there will invoke that here
+        if (phaseLast != null) {
+            if (msgctx.isPaused()) {
+                return;
+            } else {
+                log.info("Invoke the Phase first handler " + phaseLast.getName()
+                        + "with in the Phase " + phaseName);
+                phaseLast.invoke(msgctx);
+            }
+        }
     }
 
     /**
@@ -111,11 +181,297 @@
         return phaseName;
     }
 
- 
-    
 
-    public int getHandlerCount(){
+    public int getHandlerCount() {
         return handlers.size();
+    }
+
+
+
+    //////////////////////////////////////////////////////////////// FROM PhaseMetaData //////////
+
+
+    /**
+     * Method getBeforeAfter
+     *
+     * @param handler
+     * @return
+     * @throws org.apache.axis.phaseresolver.PhaseException
+     *
+     */
+    private int getBeforeAfter(Handler handler) throws PhaseException {
+        if ((!handler.getHandlerDesc().getRules().getBefore().equals(""))
+                && (!handler.getHandlerDesc().getRules().getAfter().equals(""))) {
+            if (handler.getHandlerDesc().getRules().getBefore().equals(handler.getHandlerDesc().getRules().getAfter())) {
+                throw new PhaseException("Both before and after cannot be the same for this handler"
+                        + handler.getName());
+            }
+            return BOTH_BEFORE_AFTER;
+        } else if (!handler.getHandlerDesc().getRules().getBefore().equals("")) {
+            return BEFORE;
+        } else if (!handler.getHandlerDesc().getRules().getAfter().equals("")) {
+            return AFTER;
+        } else {
+            return ANYWHERE;
+        }
+    }
+
+    /**
+     * Method setPhaseFirst
+     *
+     * @param phaseFirst
+     * @throws PhaseException
+     */
+    public void setPhaseFirst(Handler phaseFirst)
+            throws PhaseException {
+        if (phasefirstset) {
+            throw new PhaseException("PhaseFirst alredy has been set, cannot have two phaseFirst Handler for same phase "
+                    + this.getPhaseName());
+        } else {
+            if (getBeforeAfter(phaseFirst) != ANYWHERE) {
+                throw new PhaseException("Handler with PhaseFirst can not have any before or after proprty error in "
+                        + phaseFirst.getName());
+            } else {
+                this.phaseFirst = phaseFirst;
+            }
+            phasefirstset = true;
+        }
+    }
+
+
+    /**
+     * Method setPhaseLast
+     *
+     * @param phaseLast
+     * @throws PhaseException
+     */
+    public void setPhaseLast(Handler phaseLast) throws PhaseException {
+        if (phaselastset) {
+            throw new PhaseException("PhaseLast already has been set, cannot have two PhaseLast Handler for same phase "
+                    + this.getPhaseName());
+        } else {
+            if (getBeforeAfter(phaseLast) != ANYWHERE) {
+                throw new PhaseException("Handler with PhaseLast property can not have any before or after property error in "
+                        + phaseLast.getName());
+            } else {
+                this.phaseLast = phaseLast;
+            }
+            phaselastset = true;
+        }
+    }
+
+
+    /**
+     * Method addHandler
+     *
+     * @param handler
+     * @throws PhaseException
+     */
+    public void addHandler(HandlerDescription handler) throws PhaseException {
+        if (isonehanlder) {
+            throw new PhaseException(this.getPhaseName() + "can only have one handler, since there is a " +
+                    "handler with both phaseFirst and PhaseLast true ");
+        } else {
+            if (handler.getRules().isPhaseFirst() && handler.getRules().isPhaseLast()) {
+                if (handlers.size() > 0) {
+                    throw new PhaseException(this.getPhaseName() + " can not have more than one handler "
+                            + handler.getName() + " is invalid or incorrect phase rules");
+                } else {
+                    handlers.add(handler.getHandler());
+                    isonehanlder = true;
+                }
+            } else if (handler.getRules().isPhaseFirst()) {
+                setPhaseFirst(handler.getHandler());
+            } else if (handler.getRules().isPhaseLast()) {
+                setPhaseLast(handler.getHandler());
+            } else {
+                insertHandler(handler);
+            }
+
+        }
+    }
+
+    /**
+     * This method is to check whether  user try to add a handler whose before property is
+     * phaseFitsr handler , this cannot allowed , so this will throws an exception
+     * otherewise it will retun
+     *
+     * @throws PhaseException
+     */
+    private void validatebefore(Handler handler) throws PhaseException {
+        if (phaseFirst != null) {
+            String phasFirstname = phaseFirst.getHandlerDesc().getName().getLocalPart();
+            if (handler.getHandlerDesc().getRules().getBefore().equals(phasFirstname)) {
+                throw new PhaseException("Trying to insert  a Handler "
+                        + handler.getName()
+                        + " before phaseFirst "
+                        + phasFirstname);
+            }
+        }
+    }
+
+    /**
+     * This method is to check user try to add or plase a hander after the phaseLast
+     * that operation dose not allowd  so then this throw a exception
+     *
+     * @throws PhaseException
+     */
+    private void validateafter(Handler handler) throws PhaseException {
+        if (phaseLast != null) {
+            String phaseLastName = phaseLast.getHandlerDesc().getName().getLocalPart();
+            if (handler.getName().equals(phaseLastName)) {
+                throw new PhaseException("Try to insert a Handler "
+                        + handler.getName()
+                        + " after phaseLast "
+                        + phaseLastName);
+            }
+        }
+    }
+
+    /**
+     * Method insertBefore
+     *
+     * @param handler
+     */
+    private void insertBefore(Handler handler) {
+        String beforename = handler.getHandlerDesc().getRules().getBefore();
+        if (phaseLast != null) {
+            if (phaseLast.getHandlerDesc().getName().getLocalPart().equals(beforename)) {
+                handlers.add(handler);
+                return;
+            }
+        }
+        for (int i = 0; i < handlers.size(); i++) {
+            Handler temphandler = (Handler) handlers.get(i);
+            if (temphandler.getHandlerDesc().getName().getLocalPart().equals(beforename)) {
+                if (i == 0) {
+                    handlers.add(0, handler);
+                    return;
+                } else {
+                    handlers.add(i - 1, handler);
+                    return;
+                }
+            }
+        }
+        //added as last handler
+        handlers.add(handler);
+    }
+
+    /**
+     * Method insertAfter
+     *
+     * @param handler
+     */
+    private void insertAfter(Handler handler) {
+        String afterName = handler.getHandlerDesc().getRules().getAfter();
+        if (phaseLast != null) {
+            if (phaseLast.getHandlerDesc().getName().getLocalPart().equals(afterName)) {
+                handlers.add(0, handler);
+                return;
+            }
+        }
+        int count = handlers.size();
+        for (int i = 0; i < count; i++) {
+            Handler temphandler = (Handler) handlers.get(i);
+            if (temphandler.getHandlerDesc().getName().getLocalPart().equals(afterName)) {
+                if (i == count - 1) {
+                    handlers.add(handler);
+                    return;
+                } else {
+                    handlers.add(i + 1, handler);
+                    return;
+                }
+            }
+        }
+        if (handlers.size() > 0) {
+            handlers.add(0, handler);
+        } else
+            handlers.add(handler);
+    }
+
+    /**
+     * This method assume that both the before and after cant be a same hander
+     * that dose not check inside this , it should check befor calling this method
+     *
+     * @param handler
+     * @throws PhaseException
+     */
+    private void insertBeforeandAfter(Handler handler)
+            throws PhaseException {
+        int before = -1;
+        int after = -1;
+
+        /**
+         * if hander.after = PhaseFirts and hnder.before = phaselast then
+         * just add the entery to vector
+         */
+        if ((phaseFirst != null) && (phaseLast != null)) {
+            if ((phaseFirst.getHandlerDesc().getName().getLocalPart().equals(
+                    handler.getHandlerDesc().getRules().getAfter()))
+                    && (phaseLast.getHandlerDesc().getName().getLocalPart().equals(
+                            handler.getHandlerDesc().getRules().getBefore()))) {
+                handlers.add(handler);
+                return;
+            }
+        }
+
+        if (phaseFirst != null &&
+                (phaseFirst.getHandlerDesc().getName().getLocalPart().equals(
+                        handler.getHandlerDesc().getRules().getAfter()))) {
+            after = 0;
+        }
+        if (phaseLast != null &&
+                (phaseLast.getHandlerDesc().getName().getLocalPart().equals(
+                        handler.getHandlerDesc().getRules().getBefore()))) {
+            before = handlers.size();
+        }
+
+        for (int i = 0; i < handlers.size(); i++) {
+            Handler temphandler = (Handler) handlers.get(i);
+            if (handler.getHandlerDesc().getRules().getAfter().equals(
+                    temphandler.getName().getLocalPart())) {
+                after = i;
+            } else if (handler.getHandlerDesc().getRules().getBefore().equals(
+                    temphandler.getName().getLocalPart())) {
+                before = i;
+            }
+            if ((after >= 0) && (before >= 0)) {
+                // no point of continue since both the before and after index has found
+                if (after > before) {
+                    //TODO fix me Deepal , (have to check this)
+                    throw new PhaseException("incorrect handler order for "
+                            + handler.getName());
+                } else {
+                    if (after + 1 <= handlers.size()) {
+                        handlers.add(after + 1, handler);
+                        return;
+                    } else {
+                        handlers.add(after, handler);
+                        return;
+                    }
+                }
+            }
+        }
+        handlers.add(handler);
+    }
+    private void insertHandler(HandlerDescription handler) throws PhaseException {
+        int type = getBeforeAfter(handler.getHandler());
+        validateafter(handler.getHandler());
+        validatebefore(handler.getHandler());
+        switch(type){
+            case BOTH_BEFORE_AFTER : {
+                insertBeforeandAfter(handler.getHandler());
+            }
+            case BEFORE : {
+                insertBefore(handler.getHandler());
+            }
+            case AFTER : {
+                insertAfter(handler.getHandler());
+            }
+            case ANYWHERE : {
+                handlers.add(handler);
+            }
+        }
     }
 
 }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/AbstractHandler.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/AbstractHandler.java?rev=170897&r1=170896&r2=170897&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/AbstractHandler.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/handlers/AbstractHandler.java Thu May 19 02:25:28 2005
@@ -27,6 +27,7 @@
  * Class AbstractHandler
  */
 public abstract class AbstractHandler implements Handler {
+
     /**
      * Field EMPTY_HANDLER_METADATA
      */
@@ -87,5 +88,15 @@
      */
     public void init(HandlerDescription handlerdesc) {
         this.handlerDesc = handlerdesc;
+    }
+
+    /**
+     * To get the phaseRule of a handler it is required to get the HnadlerDescription of the handler
+     * so the argumnet pass when it call return as HnadlerDescription
+     *
+     * @return
+     */
+    public HandlerDescription getHandlerDesc() {
+        return handlerDesc;
     }
 }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseHolder.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseHolder.java?rev=170897&r1=170896&r2=170897&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseHolder.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseHolder.java Thu May 19 02:25:28 2005
@@ -30,25 +30,11 @@
  */
 public class PhaseHolder {
 
-    /**
-     * Field phasemetadatholder
-     */
-    private ArrayList phasemetadatholder;
 
     private ArrayList phaseList;
 
     public PhaseHolder(ArrayList phases) {
         this.phaseList = phases;
-        fillPhaseMetaData();
-    }
-
-    private void fillPhaseMetaData() {
-        phasemetadatholder = new ArrayList();
-        for (int i = 0; i < phaseList.size(); i++) {
-            Phase phase = (Phase) phaseList.get(i);
-            phasemetadatholder.add(new PhaseMetadata(phase.getPhaseName()));
-        }
-
     }
 
     /**
@@ -58,9 +44,9 @@
      * @return
      */
     private boolean isPhaseExist(String phaseName) {
-        for (int i = 0; i < phasemetadatholder.size(); i++) {
-            PhaseMetadata phase = (PhaseMetadata) phasemetadatholder.get(i);
-            if (phase.getName().equals(phaseName)) {
+        for (int i = 0; i < phaseList.size(); i++) {
+            Phase phase = (Phase) phaseList.get(i);
+            if (phase.getPhaseName().equals(phaseName)) {
                 return true;
             }
         }
@@ -76,7 +62,7 @@
     public void addHandler(HandlerDescription handler) throws PhaseException {
         String phaseName = handler.getRules().getPhaseName();
         if (isPhaseExist(phaseName)) {
-            getPhaseMetaData(phaseName).addHandler(handler);
+            getPhase(phaseName).addHandler(handler);
         } else {
             throw new PhaseException("Invalid Phase ," + phaseName
                     + "for the handler "
@@ -84,23 +70,6 @@
                     + " dose not exit in server.xml or refering to phase in diffrent flow");
         }
     }
-
-    /**
-     * Method getPhaseMetaData
-     *
-     * @param phaseName
-     * @return
-     */
-    private PhaseMetadata getPhaseMetaData(String phaseName) {
-        for (int i = 0; i < phasemetadatholder.size(); i++) {
-            PhaseMetadata phase = (PhaseMetadata) phasemetadatholder.get(i);
-            if (phase.getName().equals(phaseName)) {
-                return phase;
-            }
-        }
-        return null;
-    }
-
     /**
      * this method is used to get the actual phase object given in the phase array list
      *
@@ -118,47 +87,9 @@
     }
 
 
-    public ArrayList getOrderHandler() throws PhaseException {
-        ArrayList handlerList = new ArrayList();
-        //OrderThePhases();
-        HandlerDescription[] handlers;
-        for (int i = 0; i < phasemetadatholder.size(); i++) {
-            PhaseMetadata phase =
-                    (PhaseMetadata) phasemetadatholder.get(i);
-            handlers = phase.getOrderedHandlers();
-            for (int j = 0; j < handlers.length; j++) {
-                handlerList.add(handlers[j]);
-            }
-
-        }
-        return handlerList;
-    }
-
-
-    /**
-     * This is used to order handlers inside a phase
-     *
-     * @throws PhaseException
-     */
-    public void getOrderedHandlers() throws PhaseException {
-        HandlerDescription[] handlers;
-        for (int i = 0; i < phasemetadatholder.size(); i++) {
-            PhaseMetadata phase =
-                    (PhaseMetadata) phasemetadatholder.get(i);
-            Phase axisPhase = getPhase(phase.getName());
-            handlers = phase.getOrderedHandlers();
-            if (axisPhase != null) {
-                for (int j = 0; j < handlers.length; j++) {
-                    axisPhase.addHandler(handlers[j].getHandler());
-                }
-            }
-        }
-    }
-
-
     public void buildTransportChain(PhasesInclude trnsport, int chainType)
             throws PhaseException {
-        try {
+        /*try {
             HandlerDescription[] handlers;
             Class handlerClass = null;
             Handler handler;
@@ -286,7 +217,7 @@
             }
         } catch (AxisFault e) {
             throw new PhaseException(e);
-        }
+        }*/
     }
 
 }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseMetadata.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseMetadata.java?rev=170897&r1=170896&r2=170897&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseMetadata.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseMetadata.java Thu May 19 02:25:28 2005
@@ -40,485 +40,12 @@
     //OUTFLOW
     public static final String PHASE_MESSAGE_OUT = "MessageOut";
     public static final String PHASE_TRANSPORT_OUT = "MessageOut";
-
-
     /**
      * todo  I think thi shas to be change
      * All the handlers inside transportsender and TranportRecievre in server.xml gose
-     * to this phase 
+     * to this phase
      */
     public static final String TRANSPORT_PHASE = "TRANSPORT";
 
-    /**
-     * Field BOTH_BEFORE_AFTER
-     */
-    private static final int BOTH_BEFORE_AFTER = 0;
-
-    /**
-     * Field BEFORE
-     */
-    private static final int BEFORE = 1;
-
-    /**
-     * Field AFTER
-     */
-    private static final int AFTER = 2;
-
-    /**
-     * Field ANYWHERE
-     */
-    private static final int ANYWHERE = 3;
-
-    /**
-     * Field name
-     */
-    private String name;
-
-    /**
-     * to keet info about phase first handler
-     */
-    private HandlerDescription phaseFirst;
-
-    /**
-     * Field phasefirstset
-     */
-    private boolean phasefirstset;
-
-    /**
-     * to keet info about phase last handler
-     */
-    private HandlerDescription phaseLast;
-
-    /**
-     * Field phaselastset
-     */
-    private boolean phaselastset;
-
-    /**
-     * to store and order the handlers
-     */
-    private ArrayList orderHanders = new ArrayList();
-
-    /**
-     * to store HandlerMetaData other than phaseFirst and phseLast
-     */
-    private ArrayList phaseHandlers = new ArrayList();
-
-    /**
-     * this is want if the phaseFirst and phaseLst same hanlder
-     * that is for this phase there is only one phase
-     */
-    private boolean isonehanlder;
-
-    /**
-     * Constructor PhaseMetadata
-     *
-     * @param name
-     */
-    public PhaseMetadata(String name) {
-        this.name = name;
-        this.phaseHandlers.clear();
-        this.phasefirstset = false;
-        this.phaselastset = false;
-        this.isonehanlder = false;
-    }
-
-    /**
-     * Method getPhaseFirst
-     *
-     * @return
-     */
-    public HandlerDescription getPhaseFirst() {
-        return phaseFirst;
-    }
-
-    /**
-     * Method setPhaseFirst
-     *
-     * @param phaseFirst
-     * @throws PhaseException
-     */
-    public void setPhaseFirst(HandlerDescription phaseFirst)
-            throws PhaseException {
-        if (phasefirstset) {
-            throw new PhaseException("PhaseFirst alredy has been set, cannot have two phaseFirst Handler for same phase "
-                    + this.name);
-        } else {
-            if (getBeforeAfter(phaseFirst) != ANYWHERE) {
-                throw new PhaseException("Handler with PhaseFirst can not have any before or after proprty error in "
-                        + phaseFirst.getName());
-            } else {
-                this.phaseFirst = phaseFirst;
-            }
-            phasefirstset = true;
-        }
-    }
-
-    /**
-     * Method getPhaseLast
-     *
-     * @return
-     */
-    public HandlerDescription getPhaseLast() {
-        return phaseLast;
-    }
-
-    /**
-     * Method setPhaseLast
-     *
-     * @param phaseLast
-     * @throws PhaseException
-     */
-    public void setPhaseLast(HandlerDescription phaseLast) throws PhaseException {
-        if (phaselastset) {
-            throw new PhaseException("PhaseLast already has been set, cannot have two PhaseLast Handler for same phase "
-                    + this.name);
-        } else {
-            if (getBeforeAfter(phaseLast) != ANYWHERE) {
-                throw new PhaseException("Handler with PhaseLast property can not have any before or after property error in "
-                        + phaseLast.getName());
-            } else {
-                this.phaseLast = phaseLast;
-            }
-            phaselastset = true;
-        }
-    }
-
-    /**
-     * Method addHandler
-     *
-     * @param handler
-     * @throws PhaseException
-     */
-    public void addHandler(HandlerDescription handler) throws PhaseException {
-        if (isonehanlder) {
-            throw new PhaseException(this.getName() + "can only have one handler, since there is a " +
-                    "handler with both phaseFirst and PhaseLast true ");
-        } else {
-            if (handler.getRules().isPhaseFirst() && handler.getRules().isPhaseLast()) {
-                if (phaseHandlers.size() > 0) {
-                    throw new PhaseException(this.getName() + " can not have more than one handler "
-                            + handler.getName() + " is invalid or incorrect phase rules");
-                } else {
-                    setPhaseFirst(handler);
-                    setPhaseLast(handler);
-                    isonehanlder = true;
-                }
-            } else if (handler.getRules().isPhaseFirst()) {
-                setPhaseFirst(handler);
-            } else if (handler.getRules().isPhaseLast()) {
-                setPhaseLast(handler);
-            } else
-                phaseHandlers.add(handler);
-
-        }
-
-        //phaseHandlers.add(handler);
-    }
-
-    /**
-     * Method getName
-     *
-     * @return
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Method getOrderedHandlers
-     *
-     * @return
-     * @throws PhaseException
-     */
-    public HandlerDescription[] getOrderedHandlers() throws PhaseException {
-        int size = 0;
-
-        /**
-         * order the handlers
-         */
-        orderHandlers();
-        HandlerDescription handler[];
-        if (isonehanlder) {
-            size = 1;
-            handler = new HandlerDescription[size];
-            handler[0] = getPhaseFirst();
-            return handler;
-        }
-        if (phasefirstset) {
-            if (phaseHandlers.size() > 0) {
-                phaseHandlers.add(0, getPhaseFirst());
-            } else {
-                phaseHandlers.add(getPhaseFirst());
-            }
-        }
-        if (phaselastset) {
-            phaseHandlers.add(getPhaseLast());
-        }
-        size = phaseHandlers.size();
-        handler = new HandlerDescription[size];
-        for (int i = 0; i < phaseHandlers.size(); i++) {
-            handler[i] = (HandlerDescription) phaseHandlers.get(i);
-        }
-        return handler;
-    }
-
-    /**
-     * Method orderHandlers
-     *
-     * @throws PhaseException
-     */
-    private void orderHandlers() throws PhaseException {
-        validatebefore();
-        validateafter();
-        arrangeHandlers();
-        phaseHandlers.clear();
-        phaseHandlers = orderHanders;
-    }
-
-    /**
-     * This method is to check whether  user try to add a handler whose before property is
-     * phaseFitsr handler , this cannot allowed , so this will throws an exception
-     * otherewise it will retun
-     *
-     * @throws PhaseException
-     */
-    private void validatebefore() throws PhaseException {
-        if (getPhaseFirst() != null) {
-            String phasFirstname = getPhaseFirst().getName().getLocalPart();
-            for (int i = 0; i < phaseHandlers.size(); i++) {
-                HandlerDescription handler =
-                        (HandlerDescription) phaseHandlers.get(i);
-                if (handler.getRules().getBefore().equals(phasFirstname)) {
-                    throw new PhaseException("Try to insert  a Handler "
-                            + handler.getName()
-                            + " before phaseFirst "
-                            + phasFirstname);
-                }
-            }
-        } else {
-            return;
-        }
-    }
-
-    /**
-     * This method is to check user try to add or plase a hander after the phaseLast
-     * that operation dose not allowd  so then this throw a exception
-     *
-     * @throws PhaseException
-     */
-    private void validateafter() throws PhaseException {
-        if (getPhaseLast() != null) {
-            String phaseLastName = getPhaseLast().getName().getLocalPart();
-            for (int i = 0; i < phaseHandlers.size(); i++) {
-                HandlerDescription handler =
-                        (HandlerDescription) phaseHandlers.get(i);
-                if (handler.getName().equals(phaseLastName)) {
-                    throw new PhaseException("Try to insert a Handler "
-                            + handler.getName()
-                            + " after phaseLast "
-                            + phaseLastName);
-                }
-            }
-        }
-    }
-
-    /**
-     * Method arrangeHandlers
-     *
-     * @throws PhaseException
-     */
-    private void arrangeHandlers() throws PhaseException {
-        int count = 0;
-        int before_after = 0;
-        boolean status = false;
-        HandlerDescription handler = null;
-        while (phaseHandlers.size() > 0) {
-            if (status) {
-                handler = (HandlerDescription) phaseHandlers.get(0);
-            } else {
-                handler = (HandlerDescription) phaseHandlers.get(count);
-            }
-            status = false;
-            if (count > phaseHandlers.size()) {
-                throw new PhaseException("Invalid pahse rule for " + handler.getName());
-            }
-            before_after = getBeforeAfter(handler);
-            switch (before_after) {
-                case ANYWHERE:
-                    {
-                        orderHanders.add(handler);
-                        phaseHandlers.remove(handler);
-                        count = 0;
-                        status = true;
-                        break;
-                    }
-                case BEFORE:
-                    {
-                        status = insertBefore(handler);
-                        if (status) {
-                            phaseHandlers.remove(handler);
-                            count = 0;
-                        }
-                        break;
-                    }
-                case AFTER:
-                    {
-                        status = insertAfter(handler);
-                        if (status) {
-                            phaseHandlers.remove(handler);
-                            count = 0;
-                        }
-                        break;
-                    }
-                case BOTH_BEFORE_AFTER:
-                    {
-                        status = insertBeforeandAfter(handler);
-                        if (status) {
-                            phaseHandlers.remove(handler);
-                            count = 0;
-                        }
-                        break;
-                    }
-            }
-            if (!status) {
-                count++;
-            }
-        }
-    }
-
-    /**
-     * Method getBeforeAfter
-     *
-     * @param handler
-     * @return
-     * @throws PhaseException
-     */
-    private int getBeforeAfter(HandlerDescription handler) throws PhaseException {
-        if ((!handler.getRules().getBefore().equals(""))
-                && (!handler.getRules().getAfter().equals(""))) {
-            if (handler.getRules().getBefore().equals(handler.getRules().getAfter())) {
-                throw new PhaseException("Both before and after cannot be the same for this handler"
-                        + handler.getName());
-            }
-            return BOTH_BEFORE_AFTER;
-        } else if (!handler.getRules().getBefore().equals("")) {
-            return BEFORE;
-        } else if (!handler.getRules().getAfter().equals("")) {
-            return AFTER;
-        } else {
-            return ANYWHERE;
-        }
-    }
-
-    /**
-     * Method insertBefore
-     *
-     * @param handler
-     * @return
-     */
-    private boolean insertBefore(HandlerDescription handler) {
-        String beforename = handler.getRules().getBefore();
-        if (getPhaseLast() != null) {
-            if (getPhaseLast().getName().getLocalPart().equals(beforename)) {
-                orderHanders.add(handler);
-                return true;
-            }
-        }
-        for (int i = 0; i < orderHanders.size(); i++) {
-            HandlerDescription temphandler = (HandlerDescription) orderHanders.get(i);
-            if (temphandler.getName().getLocalPart().equals(beforename)) {
-                orderHanders.add(i, handler);
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Method insertAfter
-     *
-     * @param handler
-     * @return
-     */
-    private boolean insertAfter(HandlerDescription handler) {
-        String afterName = handler.getRules().getAfter();
-        if (getPhaseFirst() != null) {
-            if (getPhaseFirst().getName().getLocalPart().equals(afterName)) {
-                orderHanders.add(0, handler);
-                return true;
-            }
-        }
-        for (int i = 0; i < orderHanders.size(); i++) {
-            HandlerDescription temphandler = (HandlerDescription) orderHanders.get(i);
-            if (temphandler.getName().getLocalPart().equals(afterName)) {
-                if (i == orderHanders.size() - 1) {
-                    orderHanders.add(handler);
-                    return true;
-                } else {
-                    orderHanders.add(i + 1, handler);
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * This method assume that both the before and after cant be a same hander
-     * that dose not check inside this , it should check befor calling this method
-     *
-     * @param handler
-     * @return
-     * @throws PhaseException
-     */
-    private boolean insertBeforeandAfter(HandlerDescription handler)
-            throws PhaseException {
-        int before = -1;
-        int after = -1;
-
-        /**
-         * if hander.after = PhaseFirts and hnder.before = phaselast then
-         * just add the entery to vector
-         */
-        if ((getPhaseFirst() != null) && (getPhaseLast() != null)) {
-            if ((getPhaseFirst().getName().getLocalPart().equals(handler.getRules().getAfter()))
-                    && (getPhaseLast().getName().getLocalPart().equals(handler.getRules().getBefore()))) {
-                orderHanders.add(handler);
-                return true;
-            }
-        }
-
-        if (getPhaseFirst() != null &&
-                (getPhaseFirst().getName().getLocalPart().equals(handler.getRules().getAfter()))) {
-            after = 0;
-        }
-        if (getPhaseLast() != null &&
-                (getPhaseLast().getName().getLocalPart().equals(handler.getRules().getBefore()))) {
-            before = orderHanders.size();
-        }
 
-        for (int i = 0; i < orderHanders.size(); i++) {
-            HandlerDescription temphandler = (HandlerDescription) orderHanders.get(i);
-            if (handler.getRules().getAfter().equals(temphandler.getName().getLocalPart())) {
-                after = i;
-            } else if (handler.getRules().getBefore().equals(temphandler.getName().getLocalPart())) {
-                before = i;
-            }
-            if ((after >= 0) && (before >= 0)) {
-                // no point of continue since both the before and after index has found
-                if (after > before) {
-                    throw new PhaseException("incorrect handler order for "
-                            + handler.getName());
-                } else {
-                    if (after + 1 <= orderHanders.size()) {
-                        orderHanders.add(after + 1, handler);
-                    } else
-                        orderHanders.add(after, handler);
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
 }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseResolver.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseResolver.java?rev=170897&r1=170896&r2=170897&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseResolver.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/phaseresolver/PhaseResolver.java Thu May 19 02:25:28 2005
@@ -277,7 +277,6 @@
                     (HandlerDescription) allHandlers.get(i);
             phaseHolder.addHandler(handlerMetaData);
         }
-        phaseHolder.getOrderedHandlers();
     }
 
     /**
@@ -455,7 +454,6 @@
                     }
                 }
             }
-            phaseHolder.getOrderedHandlers();
         }
         return engineContext;
     }

Modified: webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/InvalidPhaseRuleTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/InvalidPhaseRuleTest.java?rev=170897&r1=170896&r2=170897&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/InvalidPhaseRuleTest.java (original)
+++ webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/InvalidPhaseRuleTest.java Thu May 19 02:25:28 2005
@@ -84,11 +84,11 @@
             ph.addHandler(hm3);
 
 
-            ArrayList oh = ph.getOrderHandler();
+           /* ArrayList oh = ph.getOrderHandler();
             for (int i = 0; i < oh.size(); i++) {
                 HandlerDescription metadata = (HandlerDescription) oh.get(i);
                 System.out.println("Name:" + metadata.getName().getLocalPart());
-            }
+            }*/
             fail("this must failed gracefully with PhaseException ");
         } catch (Exception e) {
             e.printStackTrace();
@@ -135,11 +135,11 @@
             hm1.setRules(rule1);
             ph.addHandler(hm1);
 
-            ArrayList oh = ph.getOrderHandler();
+           /* ArrayList oh = ph.getOrderHandler();
             for (int i = 0; i < oh.size(); i++) {
                 HandlerDescription metadata = (HandlerDescription) oh.get(i);
                 System.out.println("Name:" + metadata.getName().getLocalPart());
-            }
+            }*/
             fail("this must failed gracefully with PhaseException ");
         } catch (Exception e) {
             e.printStackTrace();

Modified: webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/PhaseRuleTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/PhaseRuleTest.java?rev=170897&r1=170896&r2=170897&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/PhaseRuleTest.java (original)
+++ webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/PhaseRuleTest.java Thu May 19 02:25:28 2005
@@ -77,10 +77,10 @@
         ph.addHandler(hm3);
 
 
-        ArrayList oh = ph.getOrderHandler();
+        /*ArrayList oh = ph.getOrderHandler();
         for (int i = 0; i < oh.size(); i++) {
             HandlerDescription metadata = (HandlerDescription) oh.get(i);
             System.out.println("Name:" + metadata.getName().getLocalPart());
-        }
+        }*/
     }
 }

Modified: webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/PreDispatchPhaseRuleTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/PreDispatchPhaseRuleTest.java?rev=170897&r1=170896&r2=170897&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/PreDispatchPhaseRuleTest.java (original)
+++ webservices/axis/trunk/java/modules/core/test/org/apache/axis/phaserule/PreDispatchPhaseRuleTest.java Thu May 19 02:25:28 2005
@@ -113,10 +113,10 @@
         ph.addHandler(hm3);
 
 
-        ArrayList oh = ph.getOrderHandler();
+        /*ArrayList oh = ph.getOrderHandler();
         for (int i = 0; i < oh.size(); i++) {
             HandlerDescription metadata = (HandlerDescription) oh.get(i);
             System.out.println("Name:" + metadata.getName().getLocalPart());
-        }
+        }*/
     }
 }