You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by ch...@apache.org on 2007/03/06 06:48:13 UTC

svn commit: r514989 [1/2] - in /webservices/synapse/trunk/java/modules/core/src: main/java/org/apache/synapse/ main/java/org/apache/synapse/config/ main/java/org/apache/synapse/config/xml/ main/java/org/apache/synapse/config/xml/endpoints/ main/java/or...

Author: chathura_ce
Date: Mon Mar  5 21:48:09 2007
New Revision: 514989

URL: http://svn.apache.org/viewvc?view=rev&rev=514989
Log:
Implemented the load balance and failover support for synapse. Now endpoints can be nested inside each other to obtain required functionality. Initial support for WSDL based endpoints added.

Added:
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/EndpointDefinition.java
      - copied, changed from r514585, webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Endpoint.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointDefinitionFactory.java
      - copied, changed from r514585, webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointDefinitionSerializer.java
      - copied, changed from r514585, webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointAbstractFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointAbstractSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/LoadbalanceAlgorithmFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/WSDL11EndpointBuilder.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/WSDL20EndpointBuilder.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/FailureListener.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/SendConstants.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/SendMediator.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/algorithms/
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/algorithms/LoadbalanceAlgorithm.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/algorithms/RoundRobin.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/dispatchers/
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/AddressEndpoint.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/Endpoint.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/FailoverEndpoint.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/IndirectEndpoint.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/LoadbalanceEndpoint.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/WSDLEndpoint.java
Removed:
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Endpoint.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/SendMediator.java
Modified:
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfigurationBuilder.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SendMediatorFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SendMediatorSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigurationBuilder.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigurationSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/SynapseEnvironment.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2Sender.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/AbstractRegistry.java
    webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/ProxyServiceSerializationTest.java
    webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/SendMediatorSerializationTest.java

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java?view=diff&rev=514989&r1=514988&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java Mon Mar  5 21:48:09 2007
@@ -19,6 +19,9 @@
 
 package org.apache.synapse;
 
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMAbstractFactory;
+
 import javax.xml.namespace.QName;
 
 /**
@@ -28,6 +31,9 @@
 
     /** The Synapse namespace */
     public static final String SYNAPSE_NAMESPACE = "http://ws.apache.org/ns/synapse";
+
+    public static final OMNamespace SYNAPSE_OMNAMESPACE =
+            OMAbstractFactory.getOMFactory().createOMNamespace(SYNAPSE_NAMESPACE, "syn");
 
     // -- keys related to Axis2 configuration and Synapse initialization --
     /** The key name used to store the Synapse configuration into the Axis2 config */

Copied: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/EndpointDefinition.java (from r514585, webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Endpoint.java)
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/EndpointDefinition.java?view=diff&rev=514989&p1=webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Endpoint.java&r1=514585&p2=webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/EndpointDefinition.java&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Endpoint.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/EndpointDefinition.java Mon Mar  5 21:48:09 2007
@@ -29,7 +29,7 @@
  *
  * In future registry lookups etc may be used to resolve a named endpoint into its absolute address
  */
-public class Endpoint {
+public class EndpointDefinition {
 
     /** The name of this endpoint instance */
     private String name = null;

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java?view=diff&rev=514989&r1=514988&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java Mon Mar  5 21:48:09 2007
@@ -23,6 +23,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.Mediator;
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
 import org.apache.synapse.core.axis2.ProxyService;
 import org.apache.synapse.registry.Registry;
 import org.apache.axis2.AxisFault;

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfigurationBuilder.java?view=diff&rev=514989&r1=514988&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfigurationBuilder.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfigurationBuilder.java Mon Mar  5 21:48:09 2007
@@ -25,7 +25,8 @@
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.config.xml.XMLConfigurationBuilder;
 import org.apache.synapse.mediators.base.SynapseMediator;
-import org.apache.synapse.mediators.builtin.SendMediator;
+import org.apache.synapse.mediators.builtin.send.SendMediator;
+
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;

Copied: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointDefinitionFactory.java (from r514585, webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointFactory.java)
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointDefinitionFactory.java?view=diff&rev=514989&p1=webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointFactory.java&r1=514585&p2=webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointDefinitionFactory.java&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointFactory.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointDefinitionFactory.java Mon Mar  5 21:48:09 2007
@@ -25,7 +25,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.config.Endpoint;
+import org.apache.synapse.config.EndpointDefinition;
 import org.apache.synapse.config.XMLToObjectMapper;
 
 import javax.xml.namespace.QName;
@@ -42,16 +42,16 @@
  * 
  * </endpoint>
  */
-public class EndpointFactory implements XMLToObjectMapper {
+public class EndpointDefinitionFactory implements XMLToObjectMapper {
 
-	private static Log log = LogFactory.getLog(EndpointFactory.class);
+	private static Log log = LogFactory.getLog(EndpointDefinitionFactory.class);
 
-	private static final EndpointFactory instance = new EndpointFactory();
+	private static final EndpointDefinitionFactory instance = new EndpointDefinitionFactory();
 
-	private EndpointFactory() {
+	private EndpointDefinitionFactory() {
 	}
 
-	public static Endpoint createEndpoint(OMElement elem,
+	public static EndpointDefinition createEndpoint(OMElement elem,
 			boolean anonymousEndpoint) {
 
 		OMAttribute name = elem.getAttribute(new QName(
@@ -63,7 +63,7 @@
         OMAttribute optimize = elem.getAttribute(new QName(
 					Constants.NULL_NAMESPACE, "optimize"));
 
-        Endpoint endpoint = new Endpoint();
+        EndpointDefinition endpoint = new EndpointDefinition();
 		if (!anonymousEndpoint) {
 			if (name == null) {
 				handleException("The 'name' attribute is required for a named endpoint definition");
@@ -181,7 +181,7 @@
 		return null;
 	}
 
-	public static EndpointFactory getInstance() {
+	public static EndpointDefinitionFactory getInstance() {
 		return instance;
 	}
 }

Copied: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointDefinitionSerializer.java (from r514585, webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointSerializer.java)
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointDefinitionSerializer.java?view=diff&rev=514989&p1=webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointSerializer.java&r1=514585&p2=webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointDefinitionSerializer.java&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointSerializer.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EndpointDefinitionSerializer.java Mon Mar  5 21:48:09 2007
@@ -26,7 +26,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.config.Endpoint;
+import org.apache.synapse.config.EndpointDefinition;
 
 /**
  * <endpoint name="string" address="url">
@@ -50,15 +50,15 @@
  *
  * </endpoint>
  */
-public class EndpointSerializer {
+public class EndpointDefinitionSerializer {
 
-    private static Log log = LogFactory.getLog(EndpointSerializer.class);
+    private static Log log = LogFactory.getLog(EndpointDefinitionSerializer.class);
 
     protected static final OMFactory fac = OMAbstractFactory.getOMFactory();
     protected static final OMNamespace synNS = fac.createOMNamespace(Constants.SYNAPSE_NAMESPACE, "syn");
     protected static final OMNamespace nullNS = fac.createOMNamespace(Constants.NULL_NAMESPACE, "");
 
-    public static OMElement serializeEndpoint(Endpoint endpt, OMElement parent) {
+    public static OMElement serializeEndpoint(EndpointDefinition endpt, OMElement parent) {
 
         OMElement endpoint = fac.createOMElement("endpoint", synNS);
 

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyFactory.java?view=diff&rev=514989&r1=514988&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyFactory.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyFactory.java Mon Mar  5 21:48:09 2007
@@ -20,7 +20,6 @@
 package org.apache.synapse.config.xml;
 
 import org.apache.synapse.config.XMLToObjectMapper;
-import org.apache.synapse.config.Endpoint;
 import org.apache.synapse.config.Property;
 import org.apache.synapse.SynapseException;
 import org.apache.axiom.om.OMNode;

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceFactory.java?view=diff&rev=514989&r1=514988&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceFactory.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceFactory.java Mon Mar  5 21:48:09 2007
@@ -24,6 +24,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
+import org.apache.synapse.config.xml.endpoints.EndpointAbstractFactory;
+import org.apache.synapse.config.xml.endpoints.EndpointFactory;
 import org.apache.synapse.core.axis2.ProxyService;
 import org.apache.axis2.wsdl.WSDLConstants;
 
@@ -171,7 +173,8 @@
             } else {
                 OMElement endpointElement = target.getFirstChildWithName(new QName(Constants.SYNAPSE_NAMESPACE, "endpoint"));
                 if (endpointElement != null) {
-                    proxy.setTargetInLineEndpoint(EndpointFactory.createEndpoint(endpointElement, true));
+                    EndpointFactory fac = EndpointAbstractFactory.getEndpointFactroy(endpointElement);
+                    proxy.setTargetInLineEndpoint(fac.createEndpoint(endpointElement, true));
                     isTargetOk = true;
                 }
             }

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceSerializer.java?view=diff&rev=514989&r1=514988&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceSerializer.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ProxyServiceSerializer.java Mon Mar  5 21:48:09 2007
@@ -24,7 +24,10 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.mediators.base.SequenceMediator;
-import org.apache.synapse.config.Endpoint;
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.config.EndpointDefinition;
+import org.apache.synapse.config.xml.endpoints.EndpointAbstractSerializer;
+import org.apache.synapse.config.xml.endpoints.EndpointSerializer;
 import org.apache.synapse.core.axis2.ProxyService;
 
 import java.util.Iterator;
@@ -99,7 +102,10 @@
                     "endpoint", nullNS, endpoint));
             proxy.addChild(target);
         } else if (inLineEndpoint != null) {
-            EndpointSerializer.serializeEndpoint(inLineEndpoint, target);
+            EndpointSerializer serializer
+                    = EndpointAbstractSerializer.getEndpointSerializer(inLineEndpoint);
+            OMElement epElement = serializer.serializeEndpoint(inLineEndpoint);
+            target.addChild(epElement);            
             proxy.addChild(target);
         } else {
             String inSeq = service.getTargetInSequence();

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SendMediatorFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SendMediatorFactory.java?view=diff&rev=514989&r1=514988&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SendMediatorFactory.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SendMediatorFactory.java Mon Mar  5 21:48:09 2007
@@ -19,14 +19,16 @@
 
 package org.apache.synapse.config.xml;
 
-import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.synapse.SynapseException;
 import org.apache.synapse.Mediator;
-import org.apache.synapse.config.Endpoint;
-import org.apache.synapse.mediators.builtin.SendMediator;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.config.EndpointDefinition;
+import org.apache.synapse.config.xml.endpoints.EndpointFactory;
+import org.apache.synapse.config.xml.endpoints.EndpointAbstractFactory;
+import org.apache.synapse.mediators.builtin.send.SendMediator;
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
 
 import javax.xml.namespace.QName;
 import java.net.MalformedURLException;
@@ -91,12 +93,20 @@
         // set its common attributes such as tracing etc
         initMediator(sm,elem);
 
-        Iterator iter = elem.getChildrenWithName(new QName(Constants.SYNAPSE_NAMESPACE, "endpoint"));
-        while (iter.hasNext()) {
-
-            OMElement endptElem = (OMElement) iter.next();
-            Endpoint endpt = EndpointFactory.createEndpoint(endptElem, true);
-            sm.addEndpoint(endpt);
+        OMElement epElement = elem.getFirstChildWithName(new QName(Constants.SYNAPSE_NAMESPACE, "endpoint"));
+        if (epElement != null) {
+            // get the factory for the element
+            // create the endpoint and set it in the send medaitor
+
+            EndpointFactory fac = EndpointAbstractFactory.getEndpointFactroy(epElement);
+            if (fac != null) {
+                Endpoint endpoint = fac.createEndpoint(epElement, true);
+                if (endpoint != null) {
+                    sm.setEndpoint(endpoint);
+                }
+            } else {
+                throw new SynapseException("Invalid endpoint fromat.");
+            }
         }
 
         return sm;

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SendMediatorSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SendMediatorSerializer.java?view=diff&rev=514989&r1=514988&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SendMediatorSerializer.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SendMediatorSerializer.java Mon Mar  5 21:48:09 2007
@@ -24,8 +24,11 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.Mediator;
-import org.apache.synapse.config.Endpoint;
-import org.apache.synapse.mediators.builtin.SendMediator;
+import org.apache.synapse.config.EndpointDefinition;
+import org.apache.synapse.config.xml.endpoints.EndpointSerializer;
+import org.apache.synapse.config.xml.endpoints.EndpointAbstractSerializer;
+import org.apache.synapse.mediators.builtin.send.SendMediator;
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
 
 import java.util.Iterator;
 
@@ -85,12 +88,14 @@
         SendMediator mediator = (SendMediator) m;
         OMElement send = fac.createOMElement("send", synNS);
         finalizeSerialization(send, mediator);
-        if (mediator.getEndpoints() != null) {
-            Iterator iter = mediator.getEndpoints().iterator();
-            while (iter.hasNext()) {
-                Endpoint endpt = (Endpoint) iter.next();
-                EndpointSerializer.serializeEndpoint(endpt, send);
-            }
+
+        Endpoint activeEndpoint = mediator.getEndpoint();
+        if (activeEndpoint != null) {
+            EndpointSerializer serializer = EndpointAbstractSerializer.
+                    getEndpointSerializer(activeEndpoint);
+
+            OMElement endpointElement = serializer.serializeEndpoint(activeEndpoint);
+            send.addChild(endpointElement);
         }
 
         if (parent != null) {

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigurationBuilder.java?view=diff&rev=514989&r1=514988&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigurationBuilder.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigurationBuilder.java Mon Mar  5 21:48:09 2007
@@ -24,13 +24,15 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.config.Endpoint;
+import org.apache.synapse.config.EndpointDefinition;
 import org.apache.synapse.config.SynapseConfiguration;
 import org.apache.synapse.config.Property;
 import org.apache.synapse.config.Util;
+import org.apache.synapse.config.xml.endpoints.EndpointAbstractFactory;
 import org.apache.synapse.core.axis2.ProxyService;
 import org.apache.synapse.mediators.base.SequenceMediator;
 import org.apache.synapse.mediators.base.SynapseMediator;
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
 import org.apache.synapse.mediators.builtin.LogMediator;
 import org.apache.synapse.registry.Registry;
 
@@ -226,12 +228,17 @@
             Property dp = new Property();
             dp.setType(Property.DYNAMIC_TYPE);
             dp.setKey(key.getAttributeValue());
-            dp.setMapper(EndpointFactory.getInstance());
+            //dp.setMapper(EndpointDefinitionFactory.getInstance());
+            dp.setMapper(EndpointAbstractFactory.getEndpointFactroy(ele));
             config.addNamedEndpoint(name.getAttributeValue(), dp);
         } else {
-            Endpoint endpoint = EndpointFactory.createEndpoint(ele, false);
-            // add this endpoint to the configuration
+            Endpoint endpoint = EndpointAbstractFactory.getEndpointFactroy(ele).
+                    createEndpoint(ele, false);
             config.addNamedEndpoint(endpoint.getName(), endpoint);
+
+            //EndpointDefinition endpoint = EndpointDefinitionFactory.createEndpoint(ele, false);
+            //// add this endpoint to the configuration
+            //config.addNamedEndpoint(endpoint.getName(), endpoint);
         }
     }
 

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigurationSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigurationSerializer.java?view=diff&rev=514989&r1=514988&r2=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigurationSerializer.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigurationSerializer.java Mon Mar  5 21:48:09 2007
@@ -26,7 +26,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.config.Endpoint;
+import org.apache.synapse.config.EndpointDefinition;
 import org.apache.synapse.config.SynapseConfiguration;
 import org.apache.synapse.config.Property;
 import org.apache.synapse.core.axis2.ProxyService;
@@ -117,8 +117,8 @@
                         "key", nullNS, dp.getKey()));
                 definitions.addChild(endpoint);
 
-            } else if (endpt instanceof Endpoint) {
-                EndpointSerializer.serializeEndpoint((Endpoint) endpt, definitions);
+            } else if (endpt instanceof EndpointDefinition) {
+                EndpointDefinitionSerializer.serializeEndpoint((EndpointDefinition) endpt, definitions);
             } else {
                 handleException("Invalid endpoint. Type : " + endpt.getClass());
             }

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,179 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.mediators.builtin.send.endpoints.AddressEndpoint;
+import org.apache.synapse.config.EndpointDefinition;
+import org.apache.synapse.config.xml.endpoints.utils.WSDL11EndpointBuilder;
+import org.apache.synapse.config.xml.endpoints.utils.WSDL20EndpointBuilder;
+import org.apache.synapse.Constants;
+import org.apache.synapse.SynapseException;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.axis2.wsdl.WSDLConstants;
+
+import javax.xml.namespace.QName;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.io.IOException;
+
+public class AddressEndpointFactory implements EndpointFactory {
+
+    private static Log log = LogFactory.getLog(AddressEndpointFactory.class);
+
+    private static AddressEndpointFactory instance = new AddressEndpointFactory();
+
+    private AddressEndpointFactory() {}
+
+    public static AddressEndpointFactory getInstance() {
+        return instance;
+    }
+
+    public Endpoint createEndpoint(OMElement epConfig, boolean anonymousEndpoint) {
+
+        AddressEndpoint addressEndpoint = new AddressEndpoint();
+
+        if (!anonymousEndpoint) {
+            OMAttribute name = epConfig.getAttribute(new QName(
+                    org.apache.synapse.config.xml.Constants.NULL_NAMESPACE, "name"));
+
+            if (name != null) {
+                addressEndpoint.setName(name.getAttributeValue());
+            }
+        }
+
+        OMElement addressElement = epConfig.getFirstChildWithName
+                (new QName(Constants.SYNAPSE_NAMESPACE, "address"));
+
+        if (addressElement != null) {
+            EndpointDefinition endpoint = createEndpointDefinition(addressElement);
+            addressEndpoint.setEndpoint(endpoint);
+        }
+
+        return addressEndpoint;
+    }
+
+    public Object getObjectFromOMNode(OMNode om) {
+        if (om instanceof OMElement) {
+            return createEndpoint((OMElement) om, false);
+        } else {
+            handleException("Invalid XML configuration for an Endpoint. OMElement expected");
+        }
+        return null;
+    }
+
+    private EndpointDefinition createEndpointDefinition(OMElement elem) {
+
+        OMAttribute name = elem.getAttribute(new QName(
+                org.apache.synapse.config.xml.Constants.NULL_NAMESPACE, "name"));
+        OMAttribute address = elem.getAttribute(new QName(
+                org.apache.synapse.config.xml.Constants.NULL_NAMESPACE, "uri"));
+        OMAttribute force = elem.getAttribute(new QName(
+                org.apache.synapse.config.xml.Constants.NULL_NAMESPACE, "force"));
+        OMAttribute optimize = elem.getAttribute(new QName(
+                org.apache.synapse.config.xml.Constants.NULL_NAMESPACE, "optimize"));
+        OMAttribute reference = elem.getAttribute(new QName(
+                org.apache.synapse.config.xml.Constants.NULL_NAMESPACE, "ref"));
+
+        EndpointDefinition endpoint = new EndpointDefinition();
+
+        if (reference != null) {
+            endpoint.setRef(reference.getAttributeValue());
+        } else if (address != null) {
+            endpoint.setAddress(address.getAttributeValue());
+        } else {
+            handleException("One of the 'address' or 'ref' attributes are required in an "
+                    + "anonymous endpoint");
+        }
+
+        if (force != null)
+        {
+            String forceValue = force.getAttributeValue().trim().toLowerCase();
+            if (forceValue.equals("pox")) {
+                endpoint.setForcePOX(true);
+            } else if (forceValue.equals("soap")) {
+                endpoint.setForceSOAP(true);
+            } else {
+                handleException("force value -\""+forceValue+"\" not yet implemented");
+            }
+        }
+
+        if (optimize != null && optimize.getAttributeValue().length() > 0) {
+            String method = optimize.getAttributeValue().trim();
+            if ("mtom".equalsIgnoreCase(method)) {
+                endpoint.setUseMTOM(true);
+            } else if ("swa".equalsIgnoreCase(method)) {
+                endpoint.setUseSwa(true);
+            }
+        }
+
+        OMElement wsAddr = elem.getFirstChildWithName(new QName(
+                org.apache.synapse.config.xml.Constants.SYNAPSE_NAMESPACE, "enableAddressing"));
+        if (wsAddr != null) {
+            endpoint.setAddressingOn(true);
+            String useSepList = wsAddr.getAttributeValue(new QName(
+                    "separateListener"));
+            if (useSepList != null) {
+                if (useSepList.trim().toLowerCase().startsWith("tr")
+                        || useSepList.trim().startsWith("1")) {
+                    endpoint.setUseSeparateListener(true);
+                }
+            }
+        }
+
+        OMElement wsSec = elem.getFirstChildWithName(new QName(
+                org.apache.synapse.config.xml.Constants.SYNAPSE_NAMESPACE, "enableSec"));
+        if (wsSec != null) {
+            endpoint.setSecurityOn(true);
+            OMAttribute policy = wsSec.getAttribute(new QName(
+                    org.apache.synapse.config.xml.Constants.NULL_NAMESPACE, "policy"));
+            if (policy != null) {
+                endpoint.setWsSecPolicyKey(policy.getAttributeValue());
+            }
+        }
+        OMElement wsRm = elem.getFirstChildWithName(new QName(
+                org.apache.synapse.config.xml.Constants.SYNAPSE_NAMESPACE, "enableRM"));
+        if (wsRm != null) {
+            endpoint.setReliableMessagingOn(true);
+            OMAttribute policy = wsRm.getAttribute(new QName(
+                    org.apache.synapse.config.xml.Constants.NULL_NAMESPACE, "policy"));
+            if (policy != null) {
+                endpoint.setWsRMPolicyKey(policy.getAttributeValue());
+            }
+        }
+
+        return endpoint;
+    }
+
+    private static void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
+    }
+
+    private static void handleException(String msg, Exception e) {
+        log.error(msg, e);
+        throw new SynapseException(msg, e);
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,71 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.mediators.builtin.send.endpoints.AddressEndpoint;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.Constants;
+import org.apache.synapse.config.EndpointDefinition;
+
+public class AddressEndpointSerializer implements EndpointSerializer {
+
+    private OMFactory fac = null;
+
+    public OMElement serializeEndpoint(Endpoint endpoint) {
+
+        if (!(endpoint instanceof AddressEndpoint)) {
+            throw new SynapseException("Invalid endpoint type.");
+        }
+
+        fac = OMAbstractFactory.getOMFactory();
+        OMElement endpointElement = fac.createOMElement("endpoint", Constants.SYNAPSE_OMNAMESPACE);
+
+        AddressEndpoint addressEndpoint = (AddressEndpoint) endpoint;
+        String name = addressEndpoint.getName();
+        if (name != null) {
+            endpointElement.addAttribute("name", name, null);
+        }
+
+        EndpointDefinition epAddress = addressEndpoint.getEndpoint();
+        OMElement addressElement = serializeAddress(epAddress);
+        endpointElement.addChild(addressElement);
+
+        return endpointElement;
+    }
+
+    public OMElement serializeAddress(EndpointDefinition address) {
+
+        OMElement addressElement = fac.createOMElement("address", Constants.SYNAPSE_OMNAMESPACE);
+        String uri = address.getAddress();
+        if (uri != null) {
+            addressElement.addAttribute("uri", uri, null);
+        }
+
+        if (address.isAddressingOn()) {
+            addressElement.addChild(fac.createOMElement("enableAddressing", Constants.SYNAPSE_OMNAMESPACE));
+        }
+
+        return addressElement;
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointAbstractFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointAbstractFactory.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointAbstractFactory.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointAbstractFactory.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,66 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.synapse.Constants;
+
+import javax.xml.namespace.QName;
+
+public class EndpointAbstractFactory {
+
+    public static EndpointFactory getEndpointFactroy(OMElement configElement) {
+
+        if (configElement.getAttribute(new QName("ref")) != null) {
+            IndirectEndpointFactory endpointFactory = IndirectEndpointFactory.getInstance();
+            return endpointFactory;
+        }
+
+        OMElement addressElement = configElement.getFirstChildWithName
+                (new QName(Constants.SYNAPSE_NAMESPACE, "address"));
+        if (addressElement != null) {
+            EndpointFactory endpointFactory = AddressEndpointFactory.getInstance();
+            return endpointFactory;
+        }
+
+        OMElement wsdlElement = configElement.getFirstChildWithName
+                (new QName(Constants.SYNAPSE_NAMESPACE, "wsdl"));
+        if (wsdlElement != null) {
+            EndpointFactory endpointFactory = WSDLEndpointFactory.getInstance();
+            return endpointFactory;
+        }
+
+        OMElement lbElement = configElement.getFirstChildWithName
+                (new QName(Constants.SYNAPSE_NAMESPACE, "loadbalance"));
+        if (lbElement != null) {
+            EndpointFactory endpointFactory = LoadbalanceEndpointFactory.getInstance();
+            return endpointFactory;
+        }
+
+        OMElement foElement = configElement.getFirstChildWithName
+                (new QName(Constants.SYNAPSE_NAMESPACE, "failover"));
+        if (foElement != null) {
+            EndpointFactory endpointFactory = FailoverEndpointFactory.getInstance();
+            return endpointFactory;
+        }
+
+        return null;
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointAbstractSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointAbstractSerializer.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointAbstractSerializer.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointAbstractSerializer.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,44 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.synapse.mediators.builtin.send.endpoints.*;
+import org.apache.synapse.SynapseException;
+
+public class EndpointAbstractSerializer {
+
+    public static EndpointSerializer getEndpointSerializer(Endpoint endpoint) {
+
+        if (endpoint instanceof AddressEndpoint) {
+            return new AddressEndpointSerializer();
+        } else if (endpoint instanceof WSDLEndpoint) {
+            return new WSDLEndpointSerializer();
+        } else if (endpoint instanceof IndirectEndpoint) {
+            return new IndirectEndpointSerializer();
+        } else if (endpoint instanceof LoadbalanceEndpoint) {
+            return new LoadbalanceEndpointSerializer();
+        } else if (endpoint instanceof FailoverEndpoint) {
+            return new FailoverEndpointSerializer();
+        }
+
+        throw new SynapseException("Serializer for endpoint " +
+                endpoint.getClass().toString() + " is not defined.");
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,28 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.config.XMLToObjectMapper;
+import org.apache.axiom.om.OMElement;
+
+public interface EndpointFactory extends XMLToObjectMapper {
+    public Endpoint createEndpoint(OMElement epConfig, boolean anonymousEndpoint);
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,28 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+
+public interface EndpointSerializer {
+
+    public OMElement serializeEndpoint(Endpoint endpoint);
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointFactory.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointFactory.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointFactory.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,106 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.mediators.builtin.send.endpoints.FailoverEndpoint;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.Constants;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMNode;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.xml.namespace.QName;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+public class FailoverEndpointFactory implements EndpointFactory {
+
+    private static Log log = LogFactory.getLog(FailoverEndpointFactory.class);
+
+    private static FailoverEndpointFactory instance = new FailoverEndpointFactory();
+
+    private FailoverEndpointFactory() {}
+
+    public static FailoverEndpointFactory getInstance() {
+        return instance;
+    }
+
+    public Endpoint createEndpoint(OMElement epConfig, boolean anonymousEndpoint) {
+
+        OMElement failoverElement = epConfig.getFirstChildWithName
+                (new QName(Constants.SYNAPSE_NAMESPACE, "failover"));
+        if (failoverElement != null) {
+
+            FailoverEndpoint failoverEndpoint = new FailoverEndpoint();
+
+            // set endpoint name
+            String name = failoverElement.getAttributeValue(new QName("name"));
+            if (name != null) {
+                failoverEndpoint.setName(name);
+            }
+
+            // set endpoints
+            ArrayList endpoints = getEndpoints(failoverElement);
+            failoverEndpoint.setEndpoints(endpoints);
+
+            return failoverEndpoint;
+        }
+
+        return null;
+    }
+
+    public Object getObjectFromOMNode(OMNode om) {
+         if (om instanceof OMElement) {
+            return createEndpoint((OMElement) om, false);
+        } else {
+            handleException("Invalid XML configuration for an Endpoint. OMElement expected");
+        }
+        return null;
+    }
+
+    private ArrayList getEndpoints(OMElement failoverElement) {
+
+        ArrayList endpoints = new ArrayList();
+        Iterator iter = failoverElement.getChildrenWithName
+                (org.apache.synapse.config.xml.Constants.ENDPOINT_ELT);
+        while (iter.hasNext()) {
+
+            OMElement endptElem = (OMElement) iter.next();
+
+            EndpointFactory epFac = EndpointAbstractFactory.getEndpointFactroy(endptElem);
+            Endpoint endpoint = epFac.createEndpoint(endptElem, true);
+            endpoints.add(endpoint);
+        }
+
+        return endpoints;
+    }
+
+    private static void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
+    }
+
+    private static void handleException(String msg, Exception e) {
+        log.error(msg, e);
+        throw new SynapseException(msg, e);
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointSerializer.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointSerializer.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/FailoverEndpointSerializer.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,66 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMFactory;
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.mediators.builtin.send.endpoints.FailoverEndpoint;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.Constants;
+
+import java.util.ArrayList;
+
+public class FailoverEndpointSerializer implements EndpointSerializer {
+
+    private OMFactory fac = null;
+
+    public OMElement serializeEndpoint(Endpoint endpoint) {
+
+        if (!(endpoint instanceof FailoverEndpoint)) {
+            throw new SynapseException("Invalid endpoint type.");
+        }
+
+        FailoverEndpoint failoverEndpoint = (FailoverEndpoint) endpoint;
+
+        fac = OMAbstractFactory.getOMFactory();
+        OMElement endpointElement = fac.createOMElement("endpoint", Constants.SYNAPSE_OMNAMESPACE);
+
+        OMElement failoverElement = fac.createOMElement("failover", Constants.SYNAPSE_OMNAMESPACE);
+        endpointElement.addChild(failoverElement);
+
+        String name = failoverEndpoint.getName();
+        if (name != null) {
+            endpointElement.addAttribute("name", name, null);
+        }
+
+        ArrayList endpoints = failoverEndpoint.getEndpoints();
+        for (int i = 0; i < endpoints.size(); i++) {
+            Endpoint childEndpoint = (Endpoint) endpoints.get(i);
+            EndpointSerializer serializer = EndpointAbstractSerializer.
+                    getEndpointSerializer(childEndpoint);
+            OMElement aeElement = serializer.serializeEndpoint(childEndpoint);
+            failoverElement.addChild(aeElement);
+        }
+
+        return endpointElement;
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointFactory.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointFactory.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointFactory.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,70 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.mediators.builtin.send.endpoints.IndirectEndpoint;
+import org.apache.synapse.SynapseException;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMNode;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.xml.namespace.QName;
+
+public class IndirectEndpointFactory implements EndpointFactory {
+
+    private static Log log = LogFactory.getLog(IndirectEndpointFactory.class);
+
+    private static IndirectEndpointFactory instance = new IndirectEndpointFactory();
+
+    private IndirectEndpointFactory() {}
+
+    public static IndirectEndpointFactory getInstance() {
+        return instance;
+    }
+
+    public Endpoint createEndpoint(OMElement epConfig, boolean anonymousEndpoint) {
+
+        IndirectEndpoint indirectEndpoint = new IndirectEndpoint();
+        String ref = epConfig.getAttributeValue(new QName("ref"));
+        indirectEndpoint.setRef(ref);
+        return indirectEndpoint;
+    }
+
+    public Object getObjectFromOMNode(OMNode om) {
+        if (om instanceof OMElement) {
+			return createEndpoint((OMElement) om, false);
+		} else {
+			handleException("Invalid XML configuration for an Endpoint. OMElement expected");
+		}
+		return null;
+    }
+
+     private static void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
+    }
+
+    private static void handleException(String msg, Exception e) {
+        log.error(msg, e);
+        throw new SynapseException(msg, e);
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointSerializer.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointSerializer.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/IndirectEndpointSerializer.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,51 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMFactory;
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.mediators.builtin.send.endpoints.IndirectEndpoint;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.Constants;
+
+public class IndirectEndpointSerializer implements EndpointSerializer {
+
+    private OMFactory fac = null;
+
+    public OMElement serializeEndpoint(Endpoint endpoint) {
+
+        if (!(endpoint instanceof IndirectEndpoint)) {
+            throw new SynapseException("Invalid endpoint type.");
+        }
+
+        fac = OMAbstractFactory.getOMFactory();
+        OMElement endpointElement = fac.createOMElement("endpoint", Constants.SYNAPSE_OMNAMESPACE);
+
+        IndirectEndpoint indirectEndpoint = (IndirectEndpoint) endpoint;
+        String ref = indirectEndpoint.getRef();
+        if (ref != null) {
+            endpointElement.addAttribute("ref", ref, null);
+        }
+
+        return endpointElement;
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,149 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.mediators.builtin.send.endpoints.LoadbalanceEndpoint;
+import org.apache.synapse.mediators.builtin.send.algorithms.LoadbalanceAlgorithm;
+import org.apache.synapse.mediators.builtin.send.SendConstants;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.Constants;
+import org.apache.synapse.config.xml.endpoints.utils.LoadbalanceAlgorithmFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.OMAttribute;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.xml.namespace.QName;
+import java.util.Iterator;
+import java.util.ArrayList;
+
+public class LoadbalanceEndpointFactory implements EndpointFactory {
+
+    private static Log log = LogFactory.getLog(LoadbalanceEndpointFactory.class);
+
+    private static LoadbalanceEndpointFactory instance = new LoadbalanceEndpointFactory();
+
+    private LoadbalanceEndpointFactory() {}
+
+    public static LoadbalanceEndpointFactory getInstance() {
+        return instance;
+    }
+
+    public Endpoint createEndpoint(OMElement epConfig, boolean anonymousEndpoint) {
+
+        // create the endpoint, manager and the algorithms
+
+        OMElement loadbalanceElement =  null;
+        loadbalanceElement = epConfig.getFirstChildWithName
+                (new QName(Constants.SYNAPSE_NAMESPACE, "loadbalance"));
+
+        if(loadbalanceElement != null) {
+
+            LoadbalanceEndpoint loadbalanceEndpoint = new LoadbalanceEndpoint();
+
+            // set endpoint name
+            OMAttribute name = epConfig.getAttribute(new QName(
+                    org.apache.synapse.config.xml.Constants.NULL_NAMESPACE, "name"));
+
+            if (name != null) {
+                loadbalanceEndpoint.setName(name.getAttributeValue());
+            }
+
+            // set endpoints
+            ArrayList endpoints = getEndpoints(loadbalanceElement);
+            loadbalanceEndpoint.setEndpoints(endpoints);
+
+            // set load balance algorithm
+            LoadbalanceAlgorithm algorithm = LoadbalanceAlgorithmFactory.
+                    createLoadbalanceAlgorithm(loadbalanceElement, endpoints);
+            loadbalanceEndpoint.setAlgorithm(algorithm);
+
+            // set abandon time
+            long abandonTime = 0;
+            OMAttribute atAttribute = loadbalanceElement.getAttribute
+                    (new QName(null, SendConstants.RETRY_AFTER_FAILURE_TIME));
+            if(atAttribute != null) {
+                String at = atAttribute.getAttributeValue();
+                abandonTime = Long.parseLong(at);
+                loadbalanceEndpoint.setAbandonTime(abandonTime);
+            }
+
+            //long retryInterval = 30000;
+            //OMAttribute riAttribute = loadbalanceElement.getAttribute
+            //        (new QName(null, Constants.RETRY_INTERVAL));
+            //
+            //if(riAttribute != null) {
+            //    String ri = riAttribute.getAttributeValue();
+            //    retryInterval = Long.parseLong(ri);
+            //}
+
+            //int maximumRetries = 0;
+            //OMAttribute mrAttribute = loadbalanceElement.getAttribute
+            //        (new QName(null, Constants.MAXIMUM_RETRIES));
+            //
+            //if(mrAttribute != null) {
+            //    String mr = mrAttribute.getAttributeValue();
+            //    maximumRetries = Integer.parseInt(mr);
+            //}
+
+            return loadbalanceEndpoint;
+        }
+
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object getObjectFromOMNode(OMNode om) {
+        if (om instanceof OMElement) {
+            return createEndpoint((OMElement) om, false);
+        } else {
+            handleException("Invalid XML configuration for an Endpoint. OMElement expected");
+        }
+        return null;
+    }
+
+    private ArrayList getEndpoints(OMElement loadbalanceElement) {
+
+        ArrayList endpoints = new ArrayList();
+        Iterator iter = loadbalanceElement.getChildrenWithName
+                (org.apache.synapse.config.xml.Constants.ENDPOINT_ELT);
+        while (iter.hasNext()) {
+
+            OMElement endptElem = (OMElement) iter.next();
+
+            EndpointFactory epFac = EndpointAbstractFactory.getEndpointFactroy(endptElem);
+            Endpoint endpoint = epFac.createEndpoint(endptElem, true);
+            endpoints.add(endpoint);
+        }
+
+        return endpoints;
+    }
+
+    private static void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
+    }
+
+    private static void handleException(String msg, Exception e) {
+        log.error(msg, e);
+        throw new SynapseException(msg, e);
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,75 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.mediators.builtin.send.endpoints.LoadbalanceEndpoint;
+import org.apache.synapse.mediators.builtin.send.algorithms.LoadbalanceAlgorithm;
+import org.apache.synapse.mediators.builtin.send.algorithms.RoundRobin;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.Constants;
+
+import java.util.ArrayList;
+
+public class LoadbalanceEndpointSerializer implements EndpointSerializer {
+
+    private OMFactory fac = null;
+
+    public OMElement serializeEndpoint(Endpoint endpoint) {
+
+        if (!(endpoint instanceof LoadbalanceEndpoint)) {
+            throw new SynapseException("Invalid endpoint type.");
+        }
+
+        fac = OMAbstractFactory.getOMFactory();
+        OMElement endpointElement = fac.createOMElement("endpoint", Constants.SYNAPSE_OMNAMESPACE);
+
+        LoadbalanceEndpoint loadbalanceEndpoint = (LoadbalanceEndpoint) endpoint;
+
+        String name = loadbalanceEndpoint.getName();
+        if (name != null) {
+            endpointElement.addAttribute("name", name, null);
+        }
+
+        OMElement loadbalanceElement = fac.createOMElement("loadbalance", Constants.SYNAPSE_OMNAMESPACE);
+        endpointElement.addChild(loadbalanceElement);
+
+        LoadbalanceAlgorithm algorithm = loadbalanceEndpoint.getAlgorithm();
+        String algorithmName = "roundRobin";
+        if (algorithm instanceof RoundRobin) {
+             algorithmName = "roundRobin";
+        }
+        loadbalanceElement.addAttribute("algorithm", algorithmName, null);
+
+        ArrayList endpoints = loadbalanceEndpoint.getEndpoints();
+        for (int i = 0; i < endpoints.size(); i++) {
+            Endpoint childEndpoint = (Endpoint) endpoints.get(i);
+            EndpointSerializer serializer = EndpointAbstractSerializer.
+                    getEndpointSerializer(childEndpoint);
+            OMElement aeElement = serializer.serializeEndpoint(childEndpoint);
+            loadbalanceElement.addChild(aeElement);
+        }
+
+        return endpointElement;
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,109 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.mediators.builtin.send.endpoints.WSDLEndpoint;
+import org.apache.synapse.Constants;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.config.EndpointDefinition;
+import org.apache.synapse.config.xml.endpoints.utils.WSDL11EndpointBuilder;
+import org.apache.synapse.config.xml.endpoints.utils.WSDL20EndpointBuilder;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.axis2.wsdl.WSDLConstants;
+
+import javax.xml.namespace.QName;
+import java.net.URL;
+
+public class WSDLEndpointFactory implements EndpointFactory {
+
+    private static Log log = LogFactory.getLog(WSDLEndpointFactory.class);
+
+    private static WSDLEndpointFactory instance = new WSDLEndpointFactory();
+
+    private WSDLEndpointFactory() {}
+
+    public static WSDLEndpointFactory getInstance() {
+        return instance;
+    }
+
+    public Object getObjectFromOMNode(OMNode om) {
+        if (om instanceof OMElement) {
+            return createEndpoint((OMElement) om, false);
+        } else {
+            handleException("Invalid XML configuration for an Endpoint. OMElement expected");
+        }
+        return null;
+    }
+
+    public Endpoint createEndpoint(OMElement epConfig, boolean anonymousEndpoint) {
+
+        WSDLEndpoint wsdlEndpoint = new WSDLEndpoint();
+
+        if (!anonymousEndpoint) {
+            OMAttribute name = epConfig.getAttribute(new QName(
+                    org.apache.synapse.config.xml.Constants.NULL_NAMESPACE, "name"));
+
+            if (name != null) {
+                wsdlEndpoint.setName(name.getAttributeValue());
+            }
+        }
+
+        OMElement wsdlElement = epConfig.getFirstChildWithName
+                (new QName(Constants.SYNAPSE_NAMESPACE, "wsdl"));
+
+        if (wsdlElement != null) {
+
+            String wsdlURI = wsdlElement.getAttributeValue(new QName("uri"));
+            try {
+                EndpointDefinition endpoint = new EndpointDefinition();
+
+                URL wsdlURL = new URL(wsdlURI);
+                StAXOMBuilder OMBuilder = new StAXOMBuilder(wsdlURL.openConnection().getInputStream());
+                OMElement docElement = OMBuilder.getDocumentElement();
+                String ns = docElement.getNamespace().getNamespaceURI();
+
+                if (org.apache.axis2.namespace.Constants.NS_URI_WSDL11.equals(ns)) {
+                    endpoint = new WSDL11EndpointBuilder().
+                            createEndpointDefinitionFromWSDL(wsdlElement);
+                } else if (WSDLConstants.WSDL20_2006Constants.DEFAULT_NAMESPACE_URI.equals(ns)) {
+                    endpoint = new WSDL20EndpointBuilder().
+                            createEndpointDefinitionFromWSDL(wsdlElement);
+                }
+                wsdlEndpoint.setEndpointDefinition(endpoint);
+            } catch (Exception e1) {
+
+            }
+        }
+
+        return wsdlEndpoint;
+    }
+
+    private static void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
+    }
+
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,61 @@
+/*
+ *  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.config.xml.endpoints;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.synapse.mediators.builtin.send.endpoints.Endpoint;
+import org.apache.synapse.mediators.builtin.send.endpoints.WSDLEndpoint;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.Constants;
+import org.apache.synapse.config.EndpointDefinition;
+
+public class WSDLEndpointSerializer implements EndpointSerializer {
+
+   private OMFactory fac = null;
+
+    public OMElement serializeEndpoint(Endpoint endpoint) {
+
+        if (!(endpoint instanceof WSDLEndpoint)) {
+            throw new SynapseException("Invalid endpoint type.");
+        }
+
+        fac = OMAbstractFactory.getOMFactory();
+        OMElement endpointElement = fac.createOMElement("endpoint", Constants.SYNAPSE_OMNAMESPACE);
+
+        WSDLEndpoint wsdlEndpoint = (WSDLEndpoint) endpoint;
+        String name = wsdlEndpoint.getName();
+        if (name != null) {
+            endpointElement.addAttribute("name", name, null);
+        }
+
+        EndpointDefinition epAddress = wsdlEndpoint.getEndpointDefinition();
+        OMElement wsdlElement = serializeWSDL(epAddress);
+        endpointElement.addChild(wsdlElement);
+
+        return endpointElement;
+    }
+
+    public OMElement serializeWSDL(EndpointDefinition epDef) {
+
+        return null;
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/LoadbalanceAlgorithmFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/LoadbalanceAlgorithmFactory.java?view=auto&rev=514989
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/LoadbalanceAlgorithmFactory.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/LoadbalanceAlgorithmFactory.java Mon Mar  5 21:48:09 2007
@@ -0,0 +1,53 @@
+/*
+ *  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.config.xml.endpoints.utils;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMAttribute;
+import org.apache.synapse.mediators.builtin.send.algorithms.LoadbalanceAlgorithm;
+import org.apache.synapse.mediators.builtin.send.algorithms.RoundRobin;
+import org.apache.synapse.mediators.builtin.send.SendConstants;
+
+import javax.xml.namespace.QName;
+import java.util.ArrayList;
+
+/**
+ * Factroy of all load balance algorithms. ESBSendMediatorFactroy will use this to create the
+ * appropriate algorithm implementation.
+ */
+public class LoadbalanceAlgorithmFactory {
+
+    public static LoadbalanceAlgorithm createLoadbalanceAlgorithm(OMElement loadbalanceElement, ArrayList endpoints) {
+
+        LoadbalanceAlgorithm algorithm = null;
+
+        String algorithmName = "roundRobin";
+        OMAttribute algoAttribute = loadbalanceElement.getAttribute(new QName(null, SendConstants.ALGORITHM_NAME));
+        if(algoAttribute != null) {
+            algorithmName = algoAttribute.getAttributeValue();
+        }
+
+        if(algorithmName.equalsIgnoreCase("roundRobin")) {
+                algorithm = new RoundRobin(endpoints);
+        }
+
+        return algorithm;
+    }
+}



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