You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by in...@apache.org on 2007/05/11 10:53:16 UTC

svn commit: r537133 - in /webservices/synapse/trunk/java/modules: core/src/main/java/org/apache/synapse/config/xml/ extensions/src/main/java/org/apache/synapse/mediators/throttle/

Author: indika
Date: Fri May 11 01:53:15 2007
New Revision: 537133

URL: http://svn.apache.org/viewvc?view=rev&rev=537133
Log:
Add capability to route message through the sequences instead of return true and false  when access deny or access accept according to the throttle 

Modified:
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/Constants.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediator.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorFactory.java
    webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorSerializer.java

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/Constants.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/Constants.java?view=diff&rev=537133&r1=537132&r2=537133
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/Constants.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/Constants.java Fri May 11 01:53:15 2007
@@ -98,4 +98,6 @@
     String DISPATCHER_ELEMENT       = "dispatcher";
     QName ATT_KEY_Q = new QName(NULL_NAMESPACE, "key");
     QName ATT_ADDRESS_Q = new QName(NULL_NAMESPACE, "address");
+    String ONREJECT = "onReject";
+    String ONACCEPT = "onAccept";
 }

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediator.java?view=diff&rev=537133&r1=537132&r2=537133
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediator.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediator.java Fri May 11 01:53:15 2007
@@ -25,6 +25,7 @@
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.Constants;
+import org.apache.synapse.Mediator;
 import org.apache.synapse.config.Entry;
 import org.apache.synapse.core.axis2.Axis2MessageContext;
 import org.apache.synapse.mediators.AbstractMediator;
@@ -48,6 +49,14 @@
     private OMElement inLinePolicy = null;
     /** The throttle - hold runtime + configuration data of throttle  */
     Throttle throttle = null;
+    /** The reference to the sequence which will execute when access deny*/
+    private String onReject = null;
+    /** The in-line sequence which will execute when access deny*/
+    private Mediator onRejectMediator = null;
+    /** The reference to the sequence which will execute when access accept */
+    private String onAccept  = null;
+    /** The in-line sequence which will execute when access accept */
+    private Mediator onAcceptMediator = null;
 
     public boolean mediate(MessageContext synCtx) {
         boolean shouldTrace = shouldTrace(synCtx.getTracingState());
@@ -74,10 +83,9 @@
      * @return boolean which indicate whether this caller can or not access
      */
     protected boolean canAccess(MessageContext synContext, boolean shouldTrace) {
-
+        boolean canAccess = true;
         if (throttle == null) {
-            log.info("Can not find a throttle");
-            return true;
+            log.debug("Can not find a throttle");
         }
         org.apache.axis2.context.MessageContext axis2MessageContext
                 = ((Axis2MessageContext) synContext).getAxis2MessageContext();
@@ -89,7 +97,7 @@
                 trace.trace("The IP Address of the caller is cannnot find- The Throttling will" +
                         "not occur");
             }
-            log.info("The IP address of the caller can not find - Currently only support caller-IP base"
+            log.debug("The IP address of the caller can not find - Currently only support caller-IP base"
                     + "access control - Thottling will not happen ");
             return true;
         } else {
@@ -99,27 +107,52 @@
             ThrottleContext throttleContext
                     = throttle.getThrottleContext(ThrottleConstants.IP_BASED_THROTTLE_KEY);
             if (throttleContext == null) {
-                log.info("Can not find a configuartion for the IP Based Throttle");
+                log.debug("Can not find a configuartion for the IP Based Throttle");
                 return true;
             }
             try {
                 AccessController accessControler = AccessControllerFactory.createAccessControler(
                         ThrottleConstants.IP_BASE);
-                boolean canAccess = accessControler.canAccess(throttleContext, remoteIP);
+                canAccess = accessControler.canAccess(throttleContext, remoteIP);
                 if (!canAccess) {
                     String msg = "Access has currently been denied by" +
                             " the IP_BASE throttle for the IP :\t" + remoteIP;
                     if (shouldTrace) {
                         trace.trace(msg);
                     }
-                    log.info(msg);
+                    log.debug(msg);
                 }
-                return canAccess;
             }
             catch (ThrottleException e) {
-                handleException("Error occur during throttling ",e);
+                handleException("Error occur during throttling ", e);
+            }
+        }
+        if (canAccess) {
+            if (onAccept != null) {
+                Mediator mediator = synContext.getSequence(onAccept);
+                if (mediator != null) {
+                    return mediator.mediate(synContext);
+                } else {
+                    return true;
+                }
+            } else if (onAcceptMediator != null) {
+                return onAcceptMediator.mediate(synContext);
+            } else {
                 return true;
             }
+        } else {
+            if (onReject != null) {
+                Mediator mediator = synContext.getSequence(onReject);
+                if (mediator != null) {
+                    return mediator.mediate(synContext);
+                } else {
+                    return false;
+                }
+            } else if (onRejectMediator != null) {
+                return onRejectMediator.mediate(synContext);
+            } else {
+                return false;
+            }
         }
     }
 
@@ -186,7 +219,7 @@
      */
     protected void createThrottleMetaData(OMElement policyOmElement) {
         try {
-            log.info("Creating a new throttle configuration by parsing the Policy");
+            log.debug("Creating a new throttle configuration by parsing the Policy");
             throttle = ThrottlePolicyProcessor
                     .processPoclicy(PolicyEngine.getPolicy(policyOmElement));
         }
@@ -201,7 +234,7 @@
     }
 
     private void handleException(String msg, Exception e) {
-        log.info(msg);
+        log.debug(msg);
         log.error(e);
         throw new SynapseException(msg);
     }
@@ -244,5 +277,37 @@
      */
     public void setInLinePolicy(OMElement inLinePolicy) {
         this.inLinePolicy = inLinePolicy;
+    }
+
+    public String getOnReject() {
+        return onReject;
+    }
+
+    public void setOnReject(String onReject) {
+        this.onReject = onReject;
+    }
+
+    public Mediator getOnRejectMediator() {
+        return onRejectMediator;
+    }
+
+    public void setOnRejectMediator(Mediator onRejectMediator) {
+        this.onRejectMediator = onRejectMediator;
+    }
+
+    public String getOnAccept() {
+        return onAccept;
+    }
+
+    public void setOnAccept(String onAccept) {
+        this.onAccept = onAccept;
+    }
+
+    public Mediator getOnAcceptMediator() {
+        return onAcceptMediator;
+    }
+
+    public void setOnAcceptMediator(Mediator onAcceptMediator) {
+        this.onAcceptMediator = onAcceptMediator;
     }
 }

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorFactory.java?view=diff&rev=537133&r1=537132&r2=537133
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorFactory.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorFactory.java Fri May 11 01:53:15 2007
@@ -24,6 +24,7 @@
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.config.xml.AbstractMediatorFactory;
 import org.apache.synapse.config.xml.Constants;
+import org.apache.synapse.config.xml.SequenceMediatorFactory;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import javax.xml.namespace.QName;
@@ -69,6 +70,37 @@
         // after successfully creating the mediator
         // set its common attributes such as tracing etc
         initMediator(throttleMediator,elem);
+        SequenceMediatorFactory mediatorFactory = new SequenceMediatorFactory();
+        OMAttribute onReject = elem.getAttribute(
+                new QName(Constants.NULL_NAMESPACE, Constants.ONREJECT));
+        if (onReject != null) {
+            String onRejectValue = onReject.getAttributeValue();
+            if (onRejectValue != null) {
+                throttleMediator.setOnReject(onRejectValue.trim());
+            }
+        } else {
+            OMElement onRejectMediatorElement = elem.getFirstChildWithName(
+                    new QName(Constants.SYNAPSE_NAMESPACE, Constants.ONREJECT));
+            if (onRejectMediatorElement != null) {
+                throttleMediator.setOnRejectMediator(mediatorFactory.createAnonymousSequence(
+                        onRejectMediatorElement));
+            }
+        }
+        OMAttribute onAccept = elem.getAttribute(
+                new QName(Constants.NULL_NAMESPACE, Constants.ONACCEPT));
+        if (onAccept != null) {
+            String onAcceptValue = onAccept.getAttributeValue();
+            if (onAcceptValue != null) {
+                throttleMediator.setOnAccept(onAcceptValue);
+            }
+        } else {
+            OMElement onAcceptMediatorElement = elem.getFirstChildWithName(
+                    new QName(Constants.SYNAPSE_NAMESPACE, Constants.ONACCEPT));
+            if (onAcceptMediatorElement != null) {
+                throttleMediator.setOnAcceptMediator(mediatorFactory.createAnonymousSequence(
+                        onAcceptMediatorElement));
+            }
+        }
         return throttleMediator;
     }
 

Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorSerializer.java?view=diff&rev=537133&r1=537132&r2=537133
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorSerializer.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/throttle/ThrottleMediatorSerializer.java Fri May 11 01:53:15 2007
@@ -25,8 +25,10 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.Mediator;
 import org.apache.synapse.SynapseException;
+import org.apache.synapse.mediators.base.SequenceMediator;
 import org.apache.synapse.config.xml.AbstractMediatorSerializer;
 import org.apache.synapse.config.xml.Constants;
+import org.apache.synapse.config.xml.SequenceMediatorSerializer;
 
 /**
  * The Serializer for Throttle Mediator  saving throttle instance
@@ -58,7 +60,33 @@
                 throttle.addChild(policy);
             }
         }
-        finalizeSerialization(throttle, throttleMediator);           
+        finalizeSerialization(throttle, throttleMediator);
+        String onReject = throttleMediator.getOnReject();
+        if (onReject != null) {
+            throttle.addAttribute(fac.createOMAttribute(Constants.ONREJECT, nullNS, onReject));
+        } else {
+            Mediator mediator = throttleMediator.getOnRejectMediator();
+            SequenceMediatorSerializer serializer = new SequenceMediatorSerializer();
+            if (mediator != null && mediator instanceof SequenceMediator) {
+                OMElement element = serializer.serializeAnonymousSequence(null,
+                        (SequenceMediator) mediator);
+                element.setLocalName(Constants.ONREJECT);
+                throttle.addChild(element);
+            }
+        }
+        String onAccept = throttleMediator.getOnAccept();
+        if (onAccept != null) {
+            throttle.addAttribute(fac.createOMAttribute(Constants.ONACCEPT, nullNS, onAccept));
+        } else {
+            Mediator mediator = throttleMediator.getOnAcceptMediator();
+            SequenceMediatorSerializer serializer = new SequenceMediatorSerializer();
+            if (mediator != null && mediator instanceof SequenceMediator) {
+                OMElement element = serializer.serializeAnonymousSequence(null,
+                        (SequenceMediator) mediator);
+                element.setLocalName(Constants.ONACCEPT);
+                throttle.addChild(element);
+            }
+        }
         if (parent != null) {
             parent.addChild(throttle);
         }



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