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());
- }
+ }*/
}
}