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 gd...@apache.org on 2007/04/30 07:21:26 UTC

svn commit: r533586 - in /webservices/axis2/trunk/java/modules/kernel: src/org/apache/axis2/deployment/ src/org/apache/axis2/engine/ src/org/apache/axis2/phaseresolver/ src/org/apache/axis2/util/ test/org/apache/axis2/phaserule/

Author: gdaniels
Date: Sun Apr 29 22:21:24 2007
New Revision: 533586

URL: http://svn.apache.org/viewvc?view=rev&rev=533586
Log:
A little more cleanup of Phase, make sure HandlerDescriptions have names, condense phaserule tests into PhaseRuleTests class, clean up test code.

Added:
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleHandler.java   (contents, props changed)
      - copied, changed from r533453, webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleHandlers.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleTests.java
Removed:
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/BeforeAfterTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/BeforeTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/BeforeWithNoFirstHandlerTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/InvalidPhaseFirstRulesTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/InvalidPhaseFirstTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/InvalidPhaseLastRuleTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/InvalidPhaseRuleTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/InvalidPhaselastTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseFirstTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseLastTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleHandlers.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/SingleHandlerPhaseTest.java
Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DescriptionBuilder.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DispatchPhase.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/Phase.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/phaseresolver/PhaseHolder.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/AddingHandlerToEachPhaseTest.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PreDispatchPhaseRuleTest.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DescriptionBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DescriptionBuilder.java?view=diff&rev=533586&r1=533585&r2=533586
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DescriptionBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DescriptionBuilder.java Sun Apr 29 22:21:24 2007
@@ -388,18 +388,17 @@
                                                 ParameterInclude parent,
                                                 String containingPhase)
             throws DeploymentException {
-        HandlerDescription handler = new HandlerDescription();
 
         // Setting handler name
         OMAttribute name_attribute = handler_element.getAttribute(new QName(
                 ATTRIBUTE_NAME));
 
-        if (name_attribute == null) {
+        if (name_attribute == null || name_attribute.getAttributeValue().equals("")) {
             throw new DeploymentException(Messages.getMessage(
                     DeploymentErrorMsgs.INVALID_HANDLER, "Unknown", "Name missing"));
-        } else {
-            handler.setName(name_attribute.getAttributeValue());
         }
+
+        HandlerDescription handler = new HandlerDescription(name_attribute.getAttributeValue());
 
         // Setting handler class name
         OMAttribute class_attribute = handler_element.getAttribute(new QName(

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DispatchPhase.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DispatchPhase.java?view=diff&rev=533586&r1=533585&r2=533586
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DispatchPhase.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/DispatchPhase.java Sun Apr 29 22:21:24 2007
@@ -2,29 +2,27 @@
 
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
-import org.apache.axis2.util.JavaUtils;
 import org.apache.axis2.addressing.AddressingHelper;
 import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.SessionContext;
-import org.apache.axis2.context.ServiceGroupContext;
 import org.apache.axis2.context.ContextFactory;
-import org.apache.axis2.context.ServiceContext;
+import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.description.AxisService;
+import org.apache.axis2.context.ServiceContext;
+import org.apache.axis2.context.ServiceGroupContext;
+import org.apache.axis2.context.SessionContext;
 import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.AxisServiceGroup;
 import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.transport.RequestResponseTransport;
 import org.apache.axis2.transport.TransportListener;
 import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.axis2.util.JavaUtils;
 import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004_Constants;
-import org.apache.axiom.soap.SOAPHeader;
-import org.apache.axiom.om.OMElement;
 
 import java.util.ArrayList;
-import java.util.List;
 import java.util.Iterator;
+import java.util.List;
 
 /*
 * Copyright 2004,2005 The Apache Software Foundation.
@@ -141,7 +139,7 @@
         if ((msgContext.getOperationContext() != null)
                 && (serviceContext != null)) {
             msgContext.setServiceGroupContextId(
-                    ((ServiceGroupContext) serviceContext.getParent()).getId());
+                    ((ServiceGroupContext)serviceContext.getParent()).getId());
             return;
         }
         if (Constants.SCOPE_TRANSPORT_SESSION.equals(scope)) {
@@ -149,9 +147,9 @@
         }
 
         AxisOperation axisOperation = msgContext.getAxisOperation();
-        if (axisOperation == null) {
-            return;
-        }
+//        if (axisOperation == null) {
+//            return;
+//        }
         OperationContext operationContext =
                 axisOperation.findForExistingOperationContext(msgContext);
 

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/Phase.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/Phase.java?view=diff&rev=533586&r1=533585&r2=533586
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/Phase.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/Phase.java Sun Apr 29 22:21:24 2007
@@ -122,8 +122,8 @@
         }
 
         if (isOneHandler) {
-            throw new PhaseException(this.getPhaseName()
-                    + "can only have one handler, since there is a "
+            throw new PhaseException("Phase '" + this.getPhaseName()
+                    + "' can only have one handler, since there is a "
                     + "handler with both phaseFirst and phaseLast true ");
         }
 
@@ -222,12 +222,17 @@
 
             if ((afterName != null) && (afterIndex == -1)) {
                 if (tempHandler.getName().equals(afterName)) {
-                    // Found the "before" handler
+                    // Found the "after" handler
                     afterIndex = i;
                 }
             }
         }
 
+        if ((beforeIndex > -1) && (afterIndex >= beforeIndex)) {
+            throw new PhaseException("Can't insert handler because " + beforeName + " is before " +
+                    afterName + " in Phase '" + phaseName + "'");
+        }
+
         if (phaseFirstSet && beforeIndex == 0) {
             throw new PhaseException("Can't insert handler before handler '"
                     + beforeName
@@ -380,10 +385,9 @@
         if (phaseFirstSet) {
             throw new PhaseException("PhaseFirst has been set already, cannot have two"
                     + " phaseFirst Handlers for Phase '" + this.getPhaseName() + "'");
-        } else {
-            handlers.add(0, handler);
-            phaseFirstSet = true;
         }
+        handlers.add(0, handler);
+        phaseFirstSet = true;
     }
 
     /**
@@ -400,12 +404,7 @@
                     + this.getPhaseName());
         }
 
-        if (handlers.size() == 0) {
-            handlers.add(handler);
-        } else {
-            handlers.add(handlers.size() - 1, handler);
-        }
-
+        handlers.add(handler);
         phaseLastSet = true;
     }
 

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/phaseresolver/PhaseHolder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/phaseresolver/PhaseHolder.java?view=diff&rev=533586&r1=533585&r2=533586
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/phaseresolver/PhaseHolder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/phaseresolver/PhaseHolder.java Sun Apr 29 22:21:24 2007
@@ -66,7 +66,7 @@
                 phase.addHandler(handlerDesc);
             }
         } else {
-            if (isPhaseExist(phaseName)) {
+            if (phaseExists(phaseName)) {
                 getPhase(phaseName).addHandler(handlerDesc);
             } else {
                 throw new PhaseException(Messages.getMessage(DeploymentErrorMsgs.INVALID_PHASE,
@@ -93,11 +93,12 @@
     }
 
     /**
-     * Method isPhaseExist
+     * Check if a named Phase exists in this holder.
      *
-     * @param phaseName
+     * @param phaseName name to check
+     * @return true if a Phase matching the name was found, false otherwise
      */
-    private boolean isPhaseExist(String phaseName) {
+    private boolean phaseExists(String phaseName) {
         for (int i = 0; i < phaseList.size(); i++) {
             Phase phase = (Phase) phaseList.get(i);
 

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java?view=diff&rev=533586&r1=533585&r2=533586
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java Sun Apr 29 22:21:24 2007
@@ -60,7 +60,7 @@
     private static final Log log = LogFactory.getLog(Utils.class);
 
     public static void addHandler(Flow flow, Handler handler, String phaseName) {
-        HandlerDescription handlerDesc = new HandlerDescription();
+        HandlerDescription handlerDesc = new HandlerDescription(handler.getName());
         PhaseRule rule = new PhaseRule(phaseName);
 
         handlerDesc.setRules(rule);

Modified: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/AddingHandlerToEachPhaseTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/AddingHandlerToEachPhaseTest.java?view=diff&rev=533586&r1=533585&r2=533586
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/AddingHandlerToEachPhaseTest.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/AddingHandlerToEachPhaseTest.java Sun Apr 29 22:21:24 2007
@@ -49,7 +49,7 @@
 
         HandlerDescription hm = new HandlerDescription();
         hm.setClassName("org.apache.axis2.handlers.AbstractHandler");
-        Handler h1 = new PhaseRuleHandlers();
+        Handler h1 = new PhaseRuleHandler();
         hm.setHandler(h1);
         hm.getRules().setPhaseName("*");
 
@@ -89,7 +89,7 @@
 
         HandlerDescription hm = new HandlerDescription();
         hm.setClassName("org.apache.axis2.handlers.AbstractHandler");
-        Handler h1 = new PhaseRuleHandlers();
+        Handler h1 = new PhaseRuleHandler();
         hm.setHandler(h1);
         hm.getRules().setPhaseName("*");
         hm.getRules().setPhaseFirst(true);
@@ -123,7 +123,7 @@
 
         HandlerDescription hm = new HandlerDescription();
         hm.setClassName("org.apache.axis2.handlers.AbstractHandler");
-        Handler h1 = new PhaseRuleHandlers();
+        Handler h1 = new PhaseRuleHandler();
         hm.setHandler(h1);
         hm.getRules().setPhaseName("*");
         hm.getRules().setPhaseFirst(true);

Copied: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleHandler.java (from r533453, webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleHandlers.java)
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleHandler.java?view=diff&rev=533586&p1=webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleHandlers.java&r1=533453&p2=webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleHandler.java&r2=533586
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleHandlers.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleHandler.java Sun Apr 29 22:21:24 2007
@@ -24,14 +24,16 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import javax.xml.namespace.QName;
+public class PhaseRuleHandler extends AbstractHandler {
+    private static final Log log = LogFactory.getLog(PhaseRuleHandler.class);
+    private String name;
 
-public class PhaseRuleHandlers extends AbstractHandler implements Handler {
-
-    private static final long serialVersionUID = 2941436920684525811L;
+    public PhaseRuleHandler() {
+    }
 
-    private static final Log log = LogFactory.getLog(PhaseRuleHandlers.class);
-    private QName name;
+    public PhaseRuleHandler(String name) {
+        this.name = name;
+    }
 
     public InvocationResponse invoke(MessageContext msgContext) throws AxisFault {
         log.info("I am " + name + " Handler Running :)");
@@ -42,7 +44,7 @@
         log.info("I am " + name + " Handler Running :)");
     }
 
-    public void setName(QName name) {
+    public void setName(String name) {
         this.name = name;
     }
 

Propchange: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleTests.java?view=auto&rev=533586
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleTests.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PhaseRuleTests.java Sun Apr 29 22:21:24 2007
@@ -0,0 +1,627 @@
+package org.apache.axis2.phaserule;
+/*
+ * Copyright 2007 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.axis2.engine.Phase;
+import org.apache.axis2.engine.Handler;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.axis2.engine.DispatchPhase;
+import org.apache.axis2.phaseresolver.PhaseHolder;
+import org.apache.axis2.phaseresolver.PhaseException;
+import org.apache.axis2.description.HandlerDescription;
+import org.apache.axis2.description.PhaseRule;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.ContextFactory;
+import org.apache.axis2.context.ConfigurationContext;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+/**
+ * Test various PhaseRule configurations
+ */
+public class PhaseRuleTests extends TestCase {
+
+    AxisConfiguration axisConfig;
+    
+    // Some shared Handlers and HandlerDescriptions
+    // TODO : Factor out shared data for these tests
+
+    public void testBefore() throws AxisFault {
+        ArrayList phases = new ArrayList();
+        Phase p1 = new Phase("PhaseA");
+        phases.add(p1);
+        Phase p2 = new Phase("PhaseB");
+        phases.add(p2);
+
+        MessageContext msg = ContextFactory.createMessageContext(
+                new ConfigurationContext(new AxisConfiguration()));
+
+        PhaseHolder ph = new PhaseHolder(phases);
+        HandlerDescription hm = new HandlerDescription();
+        hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h1 = new PhaseRuleHandler();
+        h1.init(hm);
+        ((PhaseRuleHandler) h1).setName("First");
+        hm.setHandler(h1);
+        hm.setName("H1");
+        PhaseRule rule = new PhaseRule();
+        rule.setPhaseName("PhaseA");
+        hm.setRules(rule);
+        ph.addHandler(hm);
+
+        HandlerDescription hm1 = new HandlerDescription();
+        hm1.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h2 = new PhaseRuleHandler();
+        ((PhaseRuleHandler) h2).setName("Second");
+        h2.init(hm1);
+        hm1.setHandler(h2);
+        hm1.setName("H2");
+        PhaseRule rule1 = new PhaseRule();
+        rule1.setPhaseName("PhaseA");
+        rule1.setBefore("H1");
+        hm1.setRules(rule1);
+        ph.addHandler(hm1);
+
+        ArrayList handlers = p1.getHandlers();
+        Handler handler = (Handler) handlers.get(0);
+        if (handler != h2) {
+            fail("Computed Hnadler order is wrong ");
+        }
+        handler = (Handler) handlers.get(1);
+        if (handler != h1) {
+            fail("Computed Hnadler order is wrong ");
+        }
+        p1.invoke(msg);
+    }
+
+    public void testBeforewithNoFirst() throws AxisFault {
+        ArrayList phases = new ArrayList();
+        Phase p1 = new Phase("PhaseA");
+        phases.add(p1);
+        Phase p2 = new Phase("PhaseB");
+        phases.add(p2);
+
+        MessageContext msg = ContextFactory.createMessageContext(
+                new ConfigurationContext(new AxisConfiguration()));
+        PhaseHolder ph = new PhaseHolder(phases);
+
+
+        HandlerDescription hm1 = new HandlerDescription();
+        hm1.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h2 = new PhaseRuleHandler();
+        ((PhaseRuleHandler) h2).setName("Second");
+        h2.init(hm1);
+        hm1.setHandler(h2);
+        hm1.setName("H2");
+        PhaseRule rule1 = new PhaseRule();
+        rule1.setPhaseName("PhaseA");
+        rule1.setBefore("H1");
+        hm1.setRules(rule1);
+        ph.addHandler(hm1);
+
+        HandlerDescription hm = new HandlerDescription();
+        hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h1 = new PhaseRuleHandler();
+        h1.init(hm);
+        ((PhaseRuleHandler) h1).setName("First");
+        hm.setHandler(h1);
+        hm.setName("H1");
+        PhaseRule rule = new PhaseRule();
+        rule.setPhaseName("PhaseA");
+        hm.setRules(rule);
+        ph.addHandler(hm);
+
+        ArrayList handlers = p1.getHandlers();
+        Handler handler = (Handler) handlers.get(0);
+        if (handler != h2) {
+            fail("Computed Handler order is wrong ");
+        }
+        handler = (Handler) handlers.get(1);
+        if (handler != h1) {
+            fail("Computed Handler order is wrong ");
+        }
+        p1.invoke(msg);
+    }
+
+    public void testBeforeAfter() throws Exception {
+        ArrayList phases = new ArrayList();
+        Phase p1 = new Phase("PhaseA");
+        phases.add(p1);
+        Phase p2 = new Phase("PhaseB");
+        phases.add(p2);
+
+        PhaseHolder ph = new PhaseHolder(phases);
+        HandlerDescription hm = new HandlerDescription();
+        hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        PhaseRuleHandler h1 = new PhaseRuleHandler();
+        h1.init(hm);
+        h1.setName("First");
+        hm.setHandler(h1);
+        hm.setName("H1");
+        PhaseRule rule = new PhaseRule();
+        rule.setPhaseName("PhaseA");
+        hm.setRules(rule);
+        ph.addHandler(hm);
+
+        HandlerDescription hm1 = new HandlerDescription();
+        hm1.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h2 = new PhaseRuleHandler();
+        ((PhaseRuleHandler) h2).setName("Forth");
+        h2.init(hm1);
+        hm1.setHandler(h2);
+        hm1.setName("H2");
+        PhaseRule rule1 = new PhaseRule();
+        rule1.setPhaseName("PhaseA");
+        hm1.setRules(rule1);
+        ph.addHandler(hm1);
+
+
+        HandlerDescription hm3 = new HandlerDescription();
+        hm3.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h3 = new PhaseRuleHandler();
+        ((PhaseRuleHandler) h3).setName("Second");
+        h3.init(hm3);
+        hm3.setHandler(h3);
+        hm3.setName("H3");
+        PhaseRule rule3 = new PhaseRule();
+        rule3.setPhaseName("PhaseA");
+        rule3.setAfter("H1");
+        hm3.setRules(rule3);
+        ph.addHandler(hm3);
+
+        HandlerDescription hm4 = new HandlerDescription();
+        hm4.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h4 = new PhaseRuleHandler();
+        ((PhaseRuleHandler) h4).setName("Third");
+        h4.init(hm4);
+        hm4.setHandler(h4);
+        hm4.setName("H4");
+        PhaseRule rule4 = new PhaseRule();
+        rule4.setPhaseName("PhaseA");
+        rule4.setAfter("H1");
+        rule4.setBefore("H2");
+        hm4.setRules(rule4);
+        ph.addHandler(hm4);
+
+        ArrayList handlers = p1.getHandlers();
+        boolean foundH1 = false;
+        boolean foundH4 = false;
+
+        for (Iterator iterator = handlers.iterator(); iterator.hasNext();) {
+            Handler handler = (Handler) iterator.next();
+            if (h3 == handler) {
+                if (!foundH1)
+                    fail("H3 found before H1");
+            }
+            if (h1 == handler)
+                foundH1 = true;
+            if (h2 == handler) {
+                if (!foundH4) {
+                    fail("H2 found before H4");
+                }
+            }
+            if (h4 == handler) {
+                if (!foundH1) {
+                    fail("H4 found before H1");
+                }
+                foundH4 = true;
+            }
+        }
+    }
+
+    public void testPhaseFirst() throws AxisFault {
+        ArrayList phases = new ArrayList();
+        Phase p1 = new Phase("PhaseA");
+        phases.add(p1);
+        Phase p2 = new Phase("PhaseB");
+        phases.add(p2);
+        PhaseHolder ph = new PhaseHolder(phases);
+        HandlerDescription hm = new HandlerDescription();
+        hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h1 = new PhaseRuleHandler();
+        h1.init(hm);
+        ((PhaseRuleHandler) h1).setName("PhaseFirstHandler");
+        hm.setHandler(h1);
+        hm.setName("H1");
+        PhaseRule rule = new PhaseRule();
+        rule.setPhaseName("PhaseA");
+        rule.setPhaseFirst(true);
+        hm.setRules(rule);
+        ph.addHandler(hm);
+
+        HandlerDescription hm1 = new HandlerDescription();
+        hm1.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h2 = new PhaseRuleHandler();
+        ((PhaseRuleHandler) h2).setName("Second Handler");
+        h2.init(hm1);
+        hm1.setHandler(h2);
+        hm1.setName("H2");
+        PhaseRule rule1 = new PhaseRule();
+        rule1.setPhaseName("PhaseA");
+        rule1.setBefore("H1");
+        hm1.setRules(rule1);
+        try {
+            ph.addHandler(hm1);
+        } catch (PhaseException e) {
+            return;
+        }
+        fail("Succeeded in deploying after PhaseFirst handler!");
+    }
+
+    public void testPhaseLast() throws AxisFault {
+        ArrayList phases = new ArrayList();
+        Phase p1 = new Phase("PhaseA");
+        phases.add(p1);
+        Phase p2 = new Phase("PhaseB");
+        phases.add(p2);
+
+        PhaseHolder ph = new PhaseHolder(phases);
+        HandlerDescription hm = new HandlerDescription();
+        hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h1 = new PhaseRuleHandler();
+        h1.init(hm);
+        ((PhaseRuleHandler) h1).setName("PhaseLast");
+        hm.setHandler(h1);
+        hm.setName("H1");
+        PhaseRule rule = new PhaseRule();
+        rule.setPhaseName("PhaseA");
+        rule.setPhaseLast(true);
+        hm.setRules(rule);
+        ph.addHandler(hm);
+
+        HandlerDescription hm1 = new HandlerDescription();
+        hm1.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h2 = new PhaseRuleHandler();
+        ((PhaseRuleHandler) h2).setName("Second Handler");
+        h2.init(hm1);
+        hm1.setHandler(h2);
+        hm1.setName("H2");
+        PhaseRule rule1 = new PhaseRule();
+        rule1.setPhaseName("PhaseA");
+        rule1.setAfter("H1");
+        hm1.setRules(rule1);
+        try {
+            ph.addHandler(hm1);
+        } catch (PhaseException e) {
+            return;
+        }
+        fail("Succeeded in deploying after PhaseLast handler!");
+    }
+
+    public void testPhaseRules() throws Exception {
+        // TODO : What is this testing exactly?
+        ArrayList inPhase = new AxisConfiguration().getGlobalInFlow();
+        Phase transportIN = new Phase("TransportIn");
+        Phase preDispatch = new Phase("PreDispatch");
+        DispatchPhase dispatchPhase = new DispatchPhase();
+        dispatchPhase.setName("Dispatch");
+
+        inPhase.add(transportIN);
+        inPhase.add(preDispatch);
+        inPhase.add(dispatchPhase);
+
+        PhaseHolder ph = new PhaseHolder(inPhase);
+
+        HandlerDescription hm = new HandlerDescription();
+        hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h1 = new PhaseRuleHandler();
+        h1.init(hm);
+        hm.setHandler(h1);
+        hm.setName("H1");
+        PhaseRule rule = new PhaseRule();
+        rule.setPhaseName("PreDispatch");
+        rule.setPhaseFirst(true);
+        hm.setRules(rule);
+        ph.addHandler(hm);
+
+        HandlerDescription hm1 = new HandlerDescription();
+        hm1.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h2 = new PhaseRuleHandler();
+        h2.init(hm1);
+        hm1.setHandler(h2);
+        hm1.setName("H2");
+        PhaseRule rule1 = new PhaseRule();
+        rule1.setPhaseName("PreDispatch");
+        rule1.setAfter("H1");
+        hm1.setRules(rule1);
+        ph.addHandler(hm1);
+
+        HandlerDescription hm2 = new HandlerDescription();
+        hm2.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h3 = new PhaseRuleHandler();
+        h3.init(hm2);
+        hm2.setHandler(h3);
+        hm2.setName("H3");
+        PhaseRule rule2 = new PhaseRule();
+        rule2.setPhaseName("PreDispatch");
+        rule2.setAfter("H1");
+        rule2.setBefore("H2");
+        hm2.setRules(rule2);
+        ph.addHandler(hm2);
+
+        HandlerDescription hm3 = new HandlerDescription();
+        hm3.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h4 = new PhaseRuleHandler();
+        h4.init(hm3);
+        hm3.setHandler(h4);
+        hm3.setName("H4");
+        PhaseRule rule3 = new PhaseRule();
+        rule3.setPhaseName("Dispatch");
+        hm3.setRules(rule3);
+        ph.addHandler(hm3);
+    }
+
+    public void testSingleHandler() throws Exception {
+        ArrayList phases = new ArrayList();
+        Phase p1 = new Phase("PhaseA");
+        phases.add(p1);
+        Phase p2 = new Phase("PhaseB");
+        phases.add(p2);
+
+        PhaseHolder ph = new PhaseHolder(phases);
+        HandlerDescription hm = new HandlerDescription();
+        hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h1 = new PhaseRuleHandler();
+        h1.init(hm);
+        ((PhaseRuleHandler) h1).setName("PhaseFirstHandler");
+        hm.setHandler(h1);
+        hm.setName("H1");
+        PhaseRule rule = new PhaseRule();
+        rule.setPhaseName("PhaseA");
+        rule.setPhaseFirst(true);
+        rule.setPhaseLast(true);
+        hm.setRules(rule);
+        ph.addHandler(hm);
+
+        HandlerDescription hm1 = new HandlerDescription();
+        hm1.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h2 = new PhaseRuleHandler();
+        ((PhaseRuleHandler) h2).setName("Second Handler");
+        h2.init(hm1);
+        hm1.setHandler(h2);
+        hm1.setName("H2");
+        PhaseRule rule1 = new PhaseRule();
+        rule1.setPhaseName("PhaseA");
+        rule1.setAfter("H1");
+        hm1.setRules(rule1);
+        try {
+            ph.addHandler(hm1);
+        } catch (PhaseException e) {
+            // Caught expected Exception
+            return;
+        }
+        fail("This should fail with : can only have one handler, since there is a " +
+                "handler with both phaseFirst and PhaseLast true ");
+    }
+
+    public void testInvalidPhaseFirst() {
+        ArrayList phases = new ArrayList();
+        Phase p1 = new Phase("PhaseA");
+        phases.add(p1);
+        Phase p2 = new Phase("PhaseB");
+        phases.add(p2);
+
+        PhaseHolder ph = new PhaseHolder(phases);
+        HandlerDescription hm = new HandlerDescription();
+        hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h1 = new PhaseRuleHandler();
+        h1.init(hm);
+        ((PhaseRuleHandler) h1).setName("PhaseFirstHandler");
+        hm.setHandler(h1);
+        hm.setName("H1");
+        PhaseRule rule = new PhaseRule();
+        rule.setPhaseName("PhaseA");
+        rule.setPhaseFirst(true);
+        rule.setBefore("H2");
+        hm.setRules(rule);
+        try {
+            // This should fail
+            ph.addHandler(hm);
+            fail("Incorrectly added Handler with both PhaseFirst and before name");
+        } catch (PhaseException e) {
+            // Perfect, caught the expected Exception
+        }
+    }
+
+    public void testInvalidPhaseFirst1() {
+        try {
+            ArrayList phases = new ArrayList();
+            Phase p1 = new Phase("PhaseA");
+            phases.add(p1);
+            Phase p2 = new Phase("PhaseB");
+            phases.add(p2);
+
+            PhaseHolder ph = new PhaseHolder(phases);
+            HandlerDescription hm = new HandlerDescription();
+            hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+            Handler h1 = new PhaseRuleHandler();
+            h1.init(hm);
+            ((PhaseRuleHandler) h1).setName("PhaseFirstHandler");
+            hm.setHandler(h1);
+            hm.setName("H1");
+            PhaseRule rule = new PhaseRule();
+            rule.setPhaseName("PhaseA");
+            rule.setPhaseFirst(true);
+            hm.setRules(rule);
+            ph.addHandler(hm);
+
+            HandlerDescription hm1 = new HandlerDescription();
+            hm1.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+            Handler h2 = new PhaseRuleHandler();
+            ((PhaseRuleHandler) h2).setName("Second Handler");
+            h2.init(hm1);
+            hm1.setHandler(h2);
+            hm1.setName("H2");
+            PhaseRule rule1 = new PhaseRule();
+            rule1.setPhaseName("PhaseA");
+            rule1.setPhaseFirst(true);
+            hm1.setRules(rule1);
+            ph.addHandler(hm1);
+            fail("This should be faild with PhaseFirst already has been set, cannot have two " +
+                    "phaseFirst Handler for same phase ");
+        } catch (AxisFault axisFault) {
+        }
+    }
+
+    public void testPhaseLastErrors() throws Exception {
+        ArrayList phases = new ArrayList();
+        Phase p1 = new Phase("PhaseA");
+        phases.add(p1);
+        Phase p2 = new Phase("PhaseB");
+        phases.add(p2);
+
+        PhaseHolder ph = new PhaseHolder(phases);
+        HandlerDescription hm = new HandlerDescription();
+        hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+        Handler h1 = new PhaseRuleHandler();
+        h1.init(hm);
+        ((PhaseRuleHandler) h1).setName("PhaseFirstHandler");
+        hm.setHandler(h1);
+        hm.setName("H1");
+        PhaseRule rule = new PhaseRule();
+        rule.setPhaseName("PhaseA");
+        rule.setPhaseLast(true);
+        rule.setBefore("H2");
+        hm.setRules(rule);
+        try {
+            ph.addHandler(hm);
+        } catch (PhaseException e) {
+            return;
+        }
+
+        fail("Handler with PhaseLast cannot also have before/after set");
+    }
+
+    public void testInvalidPhaseLast() {
+        try {
+            ArrayList phases = new ArrayList();
+            Phase p1 = new Phase("PhaseA");
+            phases.add(p1);
+            Phase p2 = new Phase("PhaseB");
+            phases.add(p2);
+
+            PhaseHolder ph = new PhaseHolder(phases);
+            HandlerDescription hm = new HandlerDescription();
+            hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+            Handler h1 = new PhaseRuleHandler();
+            h1.init(hm);
+            ((PhaseRuleHandler) h1).setName("PhaseLast");
+            hm.setHandler(h1);
+            hm.setName("H1");
+            PhaseRule rule = new PhaseRule();
+            rule.setPhaseName("PhaseA");
+            rule.setPhaseLast(true);
+            hm.setRules(rule);
+            ph.addHandler(hm);
+
+            HandlerDescription hm1 = new HandlerDescription();
+            hm1.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+            Handler h2 = new PhaseRuleHandler();
+            ((PhaseRuleHandler) h2).setName("Second Handler");
+            h2.init(hm1);
+            hm1.setHandler(h2);
+            hm1.setName("H2");
+            PhaseRule rule1 = new PhaseRule();
+            rule1.setPhaseName("PhaseA");
+            rule1.setPhaseLast(true);
+            hm1.setRules(rule1);
+            ph.addHandler(hm1);
+            fail("This should be faild with Phaselast already has been set, cannot have two " +
+                    "phaseLast Handler for same phase ");
+        } catch (AxisFault axisFault) {
+        }
+    }
+
+    public void testInvalidPhaseRule() {
+        try {
+            axisConfig = new AxisConfiguration();
+            ArrayList inPhase = axisConfig.getGlobalInFlow();
+
+            inPhase.add("global");
+            axisConfig.setInFaultPhases(inPhase);
+            axisConfig.setOutFaultPhases(inPhase);
+            axisConfig.setGlobalOutPhase(inPhase);
+
+            Handler han = null;
+            PhaseHolder ph = new PhaseHolder(inPhase);
+
+            HandlerDescription hm = new HandlerDescription();
+            hm.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+            hm.setHandler(han);
+            hm.setName("H1");
+            PhaseRule rule = new PhaseRule();
+            rule.setPhaseName("global");
+            rule.setPhaseFirst(true);
+            rule.setPhaseLast(true);
+            hm.setRules(rule);
+            ph.addHandler(hm);
+
+            HandlerDescription hm1 = new HandlerDescription();
+            hm1.setClassName("org.apache.axis2.phaserule.PhaseRuleHandler");
+            hm1.setHandler(han);
+            hm1.setName("H2");
+            PhaseRule rule1 = new PhaseRule();
+            rule1.setPhaseName("global");
+            rule1.setAfter("H1");
+            hm1.setRules(rule1);
+            ph.addHandler(hm1);
+
+            fail("this must failed gracefully with PhaseException ");
+        } catch (Exception e) {
+        }
+    }
+
+    /**
+     * This test makes sure we can't add a Handler to a Phase when the
+     * before and after constraints don't make sense.
+     *
+     * @throws Exception if there's an error
+     */
+    public void testBadBeforeAndAfters() throws Exception {
+        PhaseRuleHandler h1 = new PhaseRuleHandler("a");
+        HandlerDescription hd = new HandlerDescription("a");
+        h1.init(hd);
+
+        PhaseRuleHandler h2 = new PhaseRuleHandler("c");
+        hd = new HandlerDescription("c");
+        h2.init(hd);
+
+        Phase phase = new Phase();
+        phase.addHandler(h1);
+        phase.addHandler(h2);
+
+        PhaseRule badRule = new PhaseRule();
+        badRule.setBefore("a");
+        badRule.setAfter("c");
+
+        hd = new HandlerDescription("b");
+        PhaseRuleHandler h3 = new PhaseRuleHandler("b");
+        h3.init(hd);
+
+        hd.setHandler(h3);
+        hd.setRules(badRule);
+        try {
+            phase.addHandler(hd);
+            fail("Bad PhaseRule was accepted!");
+        } catch (PhaseException e) {
+            // Correct - exception caught
+        }
+    }
+}

Modified: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PreDispatchPhaseRuleTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PreDispatchPhaseRuleTest.java?view=diff&rev=533586&r1=533585&r2=533586
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PreDispatchPhaseRuleTest.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/phaserule/PreDispatchPhaseRuleTest.java Sun Apr 29 22:21:24 2007
@@ -54,7 +54,7 @@
 
         HandlerDescription pre = new HandlerDescription();
         pre.setClassName("org.apache.axis2.handlers.AbstractHandler");
-        Handler h1 = new PhaseRuleHandlers();
+        Handler h1 = new PhaseRuleHandler();
         h1.init(pre);
         pre.setHandler(h1);
         pre.setName("pre-H1");
@@ -65,7 +65,7 @@
 
         HandlerDescription pre2 = new HandlerDescription();
         pre2.setClassName("org.apache.axis2.handlers.AbstractHandler");
-        Handler h2 = new PhaseRuleHandlers();
+        Handler h2 = new PhaseRuleHandler();
         h2.init(pre2);
         pre2.setHandler(h2);
         pre2.setName("dispatch");
@@ -77,7 +77,7 @@
 
         HandlerDescription hm = new HandlerDescription();
         hm.setClassName("org.apache.axis2.handlers.AbstractHandler");
-        Handler h3 = new PhaseRuleHandlers();
+        Handler h3 = new PhaseRuleHandler();
         h3.init(hm);
         hm.setHandler(h3);
         hm.setName("pre-H2");
@@ -89,7 +89,7 @@
 
         HandlerDescription hm1 = new HandlerDescription();
         hm1.setClassName("org.apache.axis2.handlers.AbstractHandler");
-        Handler h4 = new PhaseRuleHandlers();
+        Handler h4 = new PhaseRuleHandler();
         h4.init(hm1);
         hm1.setHandler(h4);
         hm1.setName("pre-H3");
@@ -101,7 +101,7 @@
 
         HandlerDescription hm2 = new HandlerDescription();
         hm2.setClassName("org.apache.axis2.handlers.AbstractHandler");
-        Handler h5 = new PhaseRuleHandlers();
+        Handler h5 = new PhaseRuleHandler();
         h5.init(hm2);
         hm2.setHandler(h5);
         hm2.setName("H3");



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org