You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by su...@apache.org on 2010/05/07 10:33:57 UTC

svn commit: r942029 - in /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse: ./ config/xml/ config/xml/endpoints/ endpoints/

Author: supun
Date: Fri May  7 08:33:56 2010
New Revision: 942029

URL: http://svn.apache.org/viewvc?rev=942029&view=rev
Log:
Enabling endpoints to have user defined properties. The immediate use case is for the Loadbalancing algorithms. The corresponding issue is SYNAPSE-615

Added:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/PropertyInclude.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MediatorPropertySerializer.java
Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/ResolvingEndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/ResolvingEndpointSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AbstractEndpoint.java

Added: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/PropertyInclude.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/PropertyInclude.java?rev=942029&view=auto
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/PropertyInclude.java (added)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/PropertyInclude.java Fri May  7 08:33:56 2010
@@ -0,0 +1,62 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.
+ */
+
+package org.apache.synapse;
+
+import org.apache.synapse.mediators.MediatorProperty;
+
+import java.util.Collection;
+
+/**
+ * This inteface makes an entity to have properties. Usually properties are specified
+ * in the XML configuration langugae.
+ */
+public interface PropertyInclude {
+    /**
+     * Add a property
+     * @param property property to be added
+     */
+    void addProperty(MediatorProperty property);
+
+    /**
+     * Add a set of properties
+     * @param properties <code>Collection</code> of properties to be added
+     */
+    void addProperties(Collection<MediatorProperty> properties);
+
+    /**
+     * Retrieve the property with the specific name
+     * @param name name of the parameter
+     * @return the value of the parameter if present otherwise <code>null</code>
+     */
+    MediatorProperty getProperty(String name);
+
+    /**
+     * Remove a property and return it
+     * @param name name of the property to be removed
+     * @return Property which is removed
+     */
+    MediatorProperty removeProperty(String name);
+
+    /**
+     * Get all the parameters as a <code>Collection</code>
+     * @return retrieve the parameters as a <code>Collection</code>
+     */
+    Collection<MediatorProperty> getProperties();
+}

Added: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MediatorPropertySerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MediatorPropertySerializer.java?rev=942029&view=auto
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MediatorPropertySerializer.java (added)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MediatorPropertySerializer.java Fri May  7 08:33:56 2010
@@ -0,0 +1,111 @@
+package org.apache.synapse.config.xml;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.synapse.mediators.MediatorProperty;
+import org.apache.synapse.SynapseConstants;
+import org.apache.synapse.SynapseException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.xml.namespace.QName;
+import java.util.Collection;
+
+/**
+ * A utility class for serializing instances of MediatorProperty objects by reading
+ * through a given XML configuration
+ *
+ * <pre>
+ * &lt;element&gt;
+ *    &lt;property name="string" (value="literal" | expression="xpath")/&gt;*
+ * &lt;/element&gt;
+ * </pre>
+ */
+public class MediatorPropertySerializer {
+    private static final Log log = LogFactory.getLog(MediatorPropertySerializer.class);
+
+    protected static final OMFactory fac = OMAbstractFactory.getOMFactory();
+    protected static final OMNamespace synNS = SynapseConstants.SYNAPSE_OMNAMESPACE;
+    protected static final OMNamespace nullNS
+            = fac.createOMNamespace(XMLConfigConstants.NULL_NAMESPACE, "");
+
+    protected static final QName PROP_Q
+        = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "property");
+
+    /**
+     * Serialize all the properties to the given paren element. For each and every
+     * property ther will be a seperate property element created inside the parent element.
+     * 
+     * @param parent element to which property elements should be added
+     * @param props <code>Collection</code> of propertis
+     */
+    public static void serializeMediatorProperties(OMElement parent,
+                                               Collection<MediatorProperty> props) {
+            serializeMediatorProperties(parent, props, PROP_Q);
+    }
+
+    /**
+     * Serialize all the properties to the given paren element. For each and every
+     * property ther will be a seperate element with the given name created inside the
+     * parent element.
+     *
+     * @param parent element to which property elements should be added
+     * @param props <code>Collection</code> of propertis
+     * @param childElementName <code>QNmae</code> of the property element to be created
+     */
+    public static void serializeMediatorProperties(OMElement parent,
+                                               Collection<MediatorProperty> props,
+                                               QName childElementName) {
+        for (MediatorProperty mp : props) {
+            serializeMediatorProperty(parent, mp, childElementName);
+        }
+    }
+
+    /**
+     * Serialize the property to the given paren element. There will be a element created with
+     * the name property inside the parent element.
+     *
+     * @param parent element to which property elements should be added
+     * @param mp a property to be serialized
+     */
+    public static void serializeMediatorProperty(OMElement parent,
+                                             MediatorProperty mp) {
+        serializeMediatorProperty(parent, mp, PROP_Q);
+    }
+
+    /**
+     * Serialize the property to the given paren element. There will be a element created with
+     * given name inside the parent element.
+     *
+     * @param parent element to which property elements should be added
+     * @param mp a property to be serialized
+     * @param childElementName <code>QName</code> of the element to be created
+     */
+    public static void serializeMediatorProperty(OMElement parent,
+                                             MediatorProperty mp,
+                                             QName childElementName) {
+        OMElement prop = fac.createOMElement(childElementName, parent);
+        if (mp.getName() != null) {
+            prop.addAttribute(fac.createOMAttribute("name", nullNS, mp.getName()));
+        } else {
+            String msg = "Mediator property name missing";
+            log.error(msg);
+            throw new SynapseException(msg);
+        }
+
+        if (mp.getValue() != null) {
+            prop.addAttribute(fac.createOMAttribute("value", nullNS, mp.getValue()));
+
+        } else if (mp.getExpression() != null) {
+            SynapseXPathSerializer.serializeXPath(mp.getExpression(), prop, "expression");
+
+        } else {
+            String msg = "Mediator property must have a literal value or be an expression";
+            log.error(msg);
+            throw new SynapseException(msg);
+        }
+
+    }
+}

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java Fri May  7 08:33:56 2010
@@ -87,6 +87,8 @@ public class AddressEndpointFactory exte
             processAuditStatus(definition, addressEndpoint.getName(), addressElement);
         }
 
+        processProperties(addressEndpoint, epConfig);
+
         return addressEndpoint;
     }
 

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java Fri May  7 08:33:56 2010
@@ -45,6 +45,10 @@ public class AddressEndpointSerializer e
                 = fac.createOMElement("endpoint", SynapseConstants.SYNAPSE_OMNAMESPACE);
 
         AddressEndpoint addressEndpoint = (AddressEndpoint) endpoint;
+
+        // serialize the properties
+        serializeProperties(addressEndpoint, endpointElement);
+
         String name = addressEndpoint.getName();
         boolean anon = addressEndpoint.isAnonymous();
         if (name != null && !anon) {

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointFactory.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointFactory.java Fri May  7 08:33:56 2010
@@ -85,6 +85,9 @@ public class DefaultEndpointFactory exte
             defaultEndpoint.setDefinition(endpoint);
             processAuditStatus(endpoint, defaultEndpoint.getName(),defaultElement);
         }
+
+        processProperties(defaultEndpoint, epConfig);
+        
         return defaultEndpoint;
     }
 
@@ -155,5 +158,5 @@ public class DefaultEndpointFactory exte
                 }
             }
         }
-    }
+    }   
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointSerializer.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DefaultEndpointSerializer.java Fri May  7 08:33:56 2010
@@ -54,6 +54,9 @@ public class DefaultEndpointSerializer e
         OMElement defaultElement = serializeEndpointDefinition(epAddress);
         endpointElement.addChild(defaultElement);
 
+        // serialize the properties
+        serializeProperties(defaultEndpoint, endpointElement);
+
         return endpointElement;
     }
 

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointFactory.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointFactory.java Fri May  7 08:33:56 2010
@@ -126,6 +126,8 @@ public class DynamicLoadbalanceEndpointF
                 }
             }
 
+            processProperties(loadbalanceEndpoint, epConfig);
+
             return loadbalanceEndpoint;
         }
         return null;

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointSerializer.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointSerializer.java Fri May  7 08:33:56 2010
@@ -55,6 +55,8 @@ public class DynamicLoadbalanceEndpointS
 
         DynamicLoadbalanceEndpoint dynamicLoadbalanceEndpoint = (DynamicLoadbalanceEndpoint) endpoint;
 
+        // serialize the parameters
+        serializeProperties(dynamicLoadbalanceEndpoint, endpointElement);
 
         String name = dynamicLoadbalanceEndpoint.getName();
         boolean anon = dynamicLoadbalanceEndpoint.isAnonymous();
@@ -84,7 +86,7 @@ public class DynamicLoadbalanceEndpointS
         membershipHandlerElement.addAttribute("class",loadBalanceMembershipHandler.getClass().getName(),null);
 
         Properties membershipHandlerProperties = loadBalanceMembershipHandler.getProperties();
-        OMElement propertyElement = null;
+        OMElement propertyElement;
         for (Object property : membershipHandlerProperties.keySet()){
             propertyElement = fac.createOMElement("property", SynapseConstants.SYNAPSE_OMNAMESPACE);
             membershipHandlerElement.addChild(propertyElement);

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java Fri May  7 08:33:56 2010
@@ -28,16 +28,21 @@ import org.apache.synapse.SynapseConstan
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.config.XMLToObjectMapper;
 import org.apache.synapse.config.xml.XMLConfigConstants;
+import org.apache.synapse.config.xml.MediatorPropertyFactory;
 import org.apache.synapse.endpoints.Endpoint;
 import org.apache.synapse.endpoints.IndirectEndpoint;
 import org.apache.synapse.endpoints.EndpointDefinition;
+import org.apache.synapse.PropertyInclude;
+import org.apache.synapse.mediators.MediatorProperty;
 import org.apache.synapse.endpoints.AbstractEndpoint;
 import org.apache.synapse.util.UUIDGenerator;
 
+
 import javax.xml.namespace.QName;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.StringTokenizer;
+import java.util.List;
 
 /**
  * All endpoint factories should extend from this abstract class. Use EndpointFactory to obtain the
@@ -501,6 +506,21 @@ public abstract class EndpointFactory im
         return endpoints;
     }
 
+    /**
+     * Helper method to extract endpoint properties.
+     *
+     * @param endpoint actual endpoint to set the properties
+     * @param endpointElement actual endpoint element
+     */
+    protected void processProperties(PropertyInclude endpoint, OMElement endpointElement) {
+        List<MediatorProperty> properties =
+                MediatorPropertyFactory.getMediatorProperties(endpointElement);
+
+        if (properties != null && properties.size() > 0) {
+            endpoint.addProperties(properties);
+        }
+    }
+
     protected static void handleException(String msg) {
         log.error(msg);
         throw new SynapseException(msg);

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java Fri May  7 08:33:56 2010
@@ -25,11 +25,16 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.SynapseException;
+import org.apache.synapse.PropertyInclude;
+import org.apache.synapse.mediators.MediatorProperty;
 import org.apache.synapse.aspects.statistics.StatisticsConfigurable;
 import org.apache.synapse.config.xml.XMLConfigConstants;
+import org.apache.synapse.config.xml.MediatorPropertySerializer;
 import org.apache.synapse.endpoints.*;
 import org.apache.synapse.endpoints.EndpointDefinition;
 
+import java.util.Collection;
+
 /**
  * All endpoint serializers should implement this interface. Use EndpointSerializer to
  * obtain the correct EndpointSerializer implementation for a particular endpoint.
@@ -296,4 +301,11 @@ public abstract class EndpointSerializer
         throw new SynapseException("Serializer for endpoint " +
                 endpoint.getClass().toString() + " is not defined.");
     }
+
+    protected void serializeProperties(PropertyInclude endpoint, OMElement element) {
+        Collection<MediatorProperty> properties = endpoint.getProperties();
+        if (properties != null && properties.size() > 0) {
+            MediatorPropertySerializer.serializeMediatorProperties(element, properties);
+        }
+    }
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointFactory.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointFactory.java Fri May  7 08:33:56 2010
@@ -59,6 +59,9 @@ public class FailoverEndpointFactory ext
             }
             // set endpoints and return
             failoverEndpoint.setChildren(getEndpoints(failoverElement, failoverEndpoint));
+            // process the parameters
+            processProperties(failoverEndpoint, epConfig);
+
             return failoverEndpoint;
         }
         return null;

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointSerializer.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointSerializer.java Fri May  7 08:33:56 2010
@@ -22,7 +22,6 @@ package org.apache.synapse.config.xml.en
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.synapse.SynapseConstants;
-import org.apache.synapse.SynapseException;
 import org.apache.synapse.endpoints.Endpoint;
 import org.apache.synapse.endpoints.FailoverEndpoint;
 
@@ -44,6 +43,10 @@ public class FailoverEndpointSerializer 
         fac = OMAbstractFactory.getOMFactory();
         OMElement endpointElement
                 = fac.createOMElement("endpoint", SynapseConstants.SYNAPSE_OMNAMESPACE);
+
+        // serialize the parameters
+        serializeProperties(failoverEndpoint, endpointElement);
+
         OMElement failoverElement
                 = fac.createOMElement("failover", SynapseConstants.SYNAPSE_OMNAMESPACE);
         endpointElement.addChild(failoverElement);

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointFactory.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointFactory.java Fri May  7 08:33:56 2010
@@ -51,6 +51,10 @@ public class IndirectEndpointFactory ext
             indirectEndpoint.setName(name);
         }
         indirectEndpoint.setKey(ref);
+
+        // process the parameters
+        processProperties(indirectEndpoint, epConfig);
+
         return indirectEndpoint;
     }
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointSerializer.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointSerializer.java Fri May  7 08:33:56 2010
@@ -22,7 +22,6 @@ package org.apache.synapse.config.xml.en
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.synapse.SynapseConstants;
-import org.apache.synapse.SynapseException;
 import org.apache.synapse.endpoints.Endpoint;
 import org.apache.synapse.endpoints.IndirectEndpoint;
 
@@ -48,6 +47,9 @@ public class IndirectEndpointSerializer 
             endpointElement.addAttribute("key", ref, null);
         }
 
+        // serialize the parameters
+        serializeProperties(indirectEndpoint, endpointElement);
+
         return endpointElement;
     }
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java Fri May  7 08:33:56 2010
@@ -34,7 +34,6 @@ import javax.xml.namespace.QName;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Iterator;
-import java.util.List;
 
 /**
  * Creates {@link LoadbalanceEndpoint} using an XML configuration.
@@ -132,6 +131,9 @@ public final class LoadbalanceEndpointFa
                 loadbalanceEndpoint.setFailover(false);
             }
 
+            // process the parameters
+            processProperties(loadbalanceEndpoint, epConfig);
+
             return loadbalanceEndpoint;
         }
 

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java Fri May  7 08:33:56 2010
@@ -26,8 +26,6 @@ import org.apache.synapse.SynapseConstan
 import org.apache.synapse.config.xml.XMLConfigConstants;
 import org.apache.synapse.endpoints.Endpoint;
 import org.apache.synapse.endpoints.LoadbalanceEndpoint;
-import org.apache.synapse.endpoints.algorithms.LoadbalanceAlgorithm;
-import org.apache.synapse.endpoints.algorithms.RoundRobin;
 
 /**
  * Serializes {@link LoadbalanceEndpoint} to an XML configuration.
@@ -45,9 +43,12 @@ public class LoadbalanceEndpointSerializ
         fac = OMAbstractFactory.getOMFactory();
         OMElement endpointElement
                 = fac.createOMElement("endpoint", SynapseConstants.SYNAPSE_OMNAMESPACE);
-
+        
         LoadbalanceEndpoint loadbalanceEndpoint = (LoadbalanceEndpoint) endpoint;
 
+        // serialize the parameters
+        serializeProperties(loadbalanceEndpoint, endpointElement);
+
         String name = loadbalanceEndpoint.getName();
         boolean anon = loadbalanceEndpoint.isAnonymous();
         if (name != null && !anon) {

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/ResolvingEndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/ResolvingEndpointFactory.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/ResolvingEndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/ResolvingEndpointFactory.java Fri May  7 08:33:56 2010
@@ -20,7 +20,6 @@
 package org.apache.synapse.config.xml.endpoints;
 
 import org.apache.synapse.endpoints.Endpoint;
-import org.apache.synapse.endpoints.IndirectEndpoint;
 import org.apache.synapse.endpoints.ResolvingEndpoint;
 import org.apache.synapse.config.xml.SynapseXPathFactory;
 import org.apache.axiom.om.OMElement;
@@ -45,8 +44,7 @@ public class ResolvingEndpointFactory ex
 
     protected Endpoint createEndpoint(OMElement epConfig, boolean anonymousEndpoint) {
 
-        ResolvingEndpoint resolvingEndpoint = new ResolvingEndpoint();
-        String ref = epConfig.getAttributeValue(ATTR_KEY_EXPRESSION);
+        ResolvingEndpoint resolvingEndpoint = new ResolvingEndpoint();       
         String name = epConfig.getAttributeValue(new QName("name"));
         if (name != null) {
             resolvingEndpoint.setName(name);
@@ -58,6 +56,10 @@ public class ResolvingEndpointFactory ex
             handleException("Couldn't build the ResolvingEndpoint, unable to set " +
                     "the key-expression XPath", e);
         }
+
+        // process the parameters
+        processProperties(resolvingEndpoint, epConfig);
+
         return resolvingEndpoint;
     }
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/ResolvingEndpointSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/ResolvingEndpointSerializer.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/ResolvingEndpointSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/ResolvingEndpointSerializer.java Fri May  7 08:33:56 2010
@@ -22,7 +22,6 @@ package org.apache.synapse.config.xml.en
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.synapse.endpoints.Endpoint;
-import org.apache.synapse.endpoints.IndirectEndpoint;
 import org.apache.synapse.endpoints.ResolvingEndpoint;
 import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.config.xml.SynapseXPathSerializer;
@@ -48,6 +47,9 @@ public class ResolvingEndpointSerializer
             endpointElement.addAttribute("name", resolvingEndpoint.getName(), null);
         }
 
+        // serialize the parameters
+        serializeProperties(resolvingEndpoint, endpointElement);
+
         return endpointElement;
     }
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointFactory.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointFactory.java Fri May  7 08:33:56 2010
@@ -118,6 +118,9 @@ public class SALoadbalanceEndpointFactor
                     createLoadbalanceAlgorithm(loadbalanceElement, endpoints);
             loadbalanceEndpoint.setAlgorithm(algorithm);
 
+            // process the parameters
+            processProperties(loadbalanceEndpoint, epConfig);
+
             return loadbalanceEndpoint;
         }
 

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointSerializer.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointSerializer.java Fri May  7 08:33:56 2010
@@ -25,8 +25,6 @@ import org.apache.synapse.SynapseConstan
 import org.apache.synapse.config.xml.XMLConfigConstants;
 import org.apache.synapse.endpoints.Endpoint;
 import org.apache.synapse.endpoints.SALoadbalanceEndpoint;
-import org.apache.synapse.endpoints.algorithms.LoadbalanceAlgorithm;
-import org.apache.synapse.endpoints.algorithms.RoundRobin;
 import org.apache.synapse.endpoints.dispatch.Dispatcher;
 import org.apache.synapse.endpoints.dispatch.HttpSessionDispatcher;
 import org.apache.synapse.endpoints.dispatch.SimpleClientSessionDispatcher;
@@ -51,7 +49,9 @@ public class SALoadbalanceEndpointSerial
         fac = OMAbstractFactory.getOMFactory();
         OMElement endpointElement
                 = fac.createOMElement("endpoint", SynapseConstants.SYNAPSE_OMNAMESPACE);
-
+        // serialize the parameters
+        serializeProperties(loadbalanceEndpoint, endpointElement);
+        
         String name = loadbalanceEndpoint.getName();
         boolean anon = loadbalanceEndpoint.isAnonymous();
         if (name != null && !anon) {

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java Fri May  7 08:33:56 2010
@@ -86,6 +86,8 @@ public class WSDLEndpointFactory extends
             wsdlEndpoint.setName(name.getAttributeValue());
         }
 
+        processProperties(wsdlEndpoint, epConfig);
+
         OMElement wsdlElement = epConfig.getFirstChildWithName
                 (new QName(SynapseConstants.SYNAPSE_NAMESPACE, "wsdl"));
         if (wsdlElement != null) {
@@ -170,6 +172,9 @@ public class WSDLEndpointFactory extends
             }
         }
 
+        // process the parameters
+        processProperties(wsdlEndpoint, epConfig);
+
         return wsdlEndpoint;
     }
 

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java Fri May  7 08:33:56 2010
@@ -42,8 +42,12 @@ public class WSDLEndpointSerializer exte
         fac = OMAbstractFactory.getOMFactory();
         OMElement endpointElement
                 = fac.createOMElement("endpoint", SynapseConstants.SYNAPSE_OMNAMESPACE);
-
+        
         WSDLEndpoint wsdlEndpoint = (WSDLEndpoint) endpoint;
+
+        // serialize the parameters
+        serializeProperties(wsdlEndpoint, endpointElement);
+
         String name = wsdlEndpoint.getName();
         boolean anon = wsdlEndpoint.isAnonymous();
         if (name != null && !anon) {

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AbstractEndpoint.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AbstractEndpoint.java?rev=942029&r1=942028&r2=942029&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AbstractEndpoint.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AbstractEndpoint.java Fri May  7 08:33:56 2010
@@ -26,6 +26,7 @@ import org.apache.axis2.description.Axis
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.*;
+import org.apache.synapse.mediators.MediatorProperty;
 import org.apache.synapse.aspects.ComponentType;
 import org.apache.synapse.aspects.AspectConfiguration;
 import org.apache.synapse.aspects.statistics.StatisticsReporter;
@@ -34,13 +35,12 @@ import org.apache.synapse.core.SynapseEn
 import org.apache.synapse.core.axis2.Axis2MessageContext;
 import org.apache.synapse.core.axis2.Axis2SynapseEnvironment;
 
-import java.util.List;
-import java.util.Stack;
+import java.util.*;
 
 /**
  * An abstract base class for all Endpoint implementations
  */
-public abstract class AbstractEndpoint extends FaultHandler implements Endpoint {
+public abstract class AbstractEndpoint extends FaultHandler implements Endpoint, PropertyInclude {
 
     protected Log log;
     protected static final Log trace = LogFactory.getLog(SynapseConstants.TRACE_LOGGER);
@@ -72,6 +72,9 @@ public abstract class AbstractEndpoint e
     /** The name of the file where this endpoint is defined */
     protected String fileName;
 
+    /** Map for storing configuration parameters */
+    private Map<String, MediatorProperty> properties = new HashMap<String, MediatorProperty>();
+
     protected boolean anonymous = false;
 
     protected AbstractEndpoint() {
@@ -470,4 +473,57 @@ public abstract class AbstractEndpoint e
         MBeanRegistrar.getInstance().unRegisterMBean("Endpoint", endpointName);
         this.initialized = false;
     }
+
+    /**
+     * Add a property to the endpoint.
+      * @param property property to be added
+     */
+    public void addProperty(MediatorProperty property) {        
+        properties.put(property.getName(), property);
+    }
+
+    /**
+     * Get a property with the given name
+     * @param name name of the property
+     *
+     * @return a property with the given name
+     */
+    public MediatorProperty getProperty(String name) {
+        MediatorProperty value = properties.get(name);
+        if (value == null) {
+            if (getParentEndpoint() instanceof PropertyInclude) {
+                value = ((PropertyInclude)getParentEndpoint()).getProperty(name);
+            }
+        }
+        return value;
+    }
+
+    /**
+     * Return the <code>Collection</code> of properties specified
+     * 
+     * @return <code>Collection</code> of properties
+     */
+    public Collection<MediatorProperty> getProperties() {
+        return properties.values();
+    }
+
+    /**
+     * Remove a property with the given name
+     * @param name name of the property to be removed
+     *
+     * @return the remove property or <code>null</code> if a property doesn't exists
+     */
+    public MediatorProperty removeProperty(String name) {
+        return properties.remove(name);
+    }
+
+    /**
+     * Add all the properties to the endpoint
+     * @param mediatorProperties <code>Collection</code> of properties to be added 
+     */
+    public void addProperties(Collection<MediatorProperty> mediatorProperties) {
+        for (MediatorProperty property : mediatorProperties) {
+            properties.put(property.getName(), property);
+        }
+    }
 }