You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by sa...@apache.org on 2006/05/18 10:18:37 UTC

svn commit: r407499 [1/2] - in /incubator/synapse/trunk/java: etc/ modules/core/conf/ modules/core/src/org/apache/synapse/ modules/core/src/org/apache/synapse/config/ modules/core/src/org/apache/synapse/config/xml/ modules/core/src/org/apache/synapse/m...

Author: saminda
Date: Thu May 18 01:18:34 2006
New Revision: 407499

URL: http://svn.apache.org/viewvc?rev=407499&view=rev
Log:
committing for asankha
Enhanced Spring support and mediator log statements

Added:
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Configuration.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactoryFinder.java
    incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ConfigurationFactory
    incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.MediatorFactory
      - copied, changed from r405612, incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.xml.MediatorFactory
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfiguration.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigurationFactory.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/
      - copied from r405612, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/TestMessageContext.java
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/TestUtils.java
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringMediatorTest.java
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringTestBean.java
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/TestMediateHandler.java
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/TestMediateHandlerImpl.java
    incubator/synapse/trunk/java/repository/conf/sample/springsample.xml
    incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_3.xml
Removed:
    incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.xml.MediatorFactory
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediatorFactory.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/processors/
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/extensions/
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spi/
Modified:
    incubator/synapse/trunk/java/etc/project.properties
    incubator/synapse/trunk/java/modules/core/conf/log4j.properties
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/Constants.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/HeaderType.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/Constants.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseConfigurationBuilder.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/AbstractListMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SynapseMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/DropMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/LogMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/PropertyMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/SendMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/ValidateMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/InMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/OutMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/SwitchCaseMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/SwitchMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/HeaderMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java
    incubator/synapse/trunk/java/modules/extensions/project.xml
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java
    incubator/synapse/trunk/java/modules/samples/src/samples/mediation/AdvancedQuoteClient.java

Modified: incubator/synapse/trunk/java/etc/project.properties
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/etc/project.properties?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/etc/project.properties (original)
+++ incubator/synapse/trunk/java/etc/project.properties Thu May 18 01:18:34 2006
@@ -82,7 +82,7 @@
 modules/core/project.xml,\
 #modules/mediators/project.xml,\
 modules/samples/project.xml,\
-#modules/extensions/project.xml,\
+modules/extensions/project.xml,\
 ${optional.includes}
 
 # -------------------------------------------------------------------

Modified: incubator/synapse/trunk/java/modules/core/conf/log4j.properties
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/conf/log4j.properties?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/conf/log4j.properties (original)
+++ incubator/synapse/trunk/java/modules/core/conf/log4j.properties Thu May 18 01:18:34 2006
@@ -8,7 +8,7 @@
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 
-log4j.appender.stdout.layout.ConversionPattern=[%t] %-5p %-20c{2} - %m %n
+log4j.appender.stdout.layout.ConversionPattern=[%t] %-5p %C{1} - %m %n
 
 ####  appender writes to a file
 log4j.appender.logfile=org.apache.log4j.RollingFileAppender
@@ -21,4 +21,4 @@
 log4j.appender.logfile.MaxBackupIndex=10
 
 log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
-log4j.appender.logfile.layout.ConversionPattern=%6r %5p [%t] (%F:%L) - %m%n
\ No newline at end of file
+log4j.appender.logfile.layout.ConversionPattern=%6r [%t] %5p %C{1} (%F:%L) - %m%n
\ No newline at end of file

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/Constants.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/Constants.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/Constants.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/Constants.java Thu May 18 01:18:34 2006
@@ -18,7 +18,7 @@
 import javax.xml.namespace.QName;
 
 /**
- * <p> Global constants for the Synapse project
+ * Global constants for the Synapse project
  */
 public interface Constants {
 

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/HeaderType.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/HeaderType.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/HeaderType.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/HeaderType.java Thu May 18 01:18:34 2006
@@ -165,4 +165,30 @@
             }
         }
     }
+
+    /**
+     * The header type this describes
+     * @return the header type as a string
+     */
+    public String getHeaderType() {
+        switch (headerType) {
+            case TO: {
+                return STR_TO;
+            }
+            case FROM: {
+                return STR_FROM;
+            }
+            case REPLYTO: {
+                return STR_REPLY_TO;
+            }
+            case ACTION: {
+                return STR_ACTION;
+            }
+            default: {
+                String msg = "Unknown header type : " + headerType;
+                log.error(msg);
+                throw new SynapseException(msg);
+            }
+        }
+    }
 }

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Configuration.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Configuration.java?rev=407499&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Configuration.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Configuration.java Thu May 18 01:18:34 2006
@@ -0,0 +1,58 @@
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.synapse.config;
+
+import java.util.Map;
+import java.util.HashMap;
+
+public class Configuration {
+
+    /** The name of this configuration */
+    private String name;
+    /** The type of this named Configuration */
+    private String type;
+
+    /**
+     * Custom (extensible properties of this configuration
+     * e.g. type=Spring, file=url etc
+     */
+    private Map properties = new HashMap();
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public void addProperty(String name, String value) {
+        properties.put(name, value);
+    }
+
+    public String getProperty(String name) {
+        return (String) properties.get(name);
+    }
+}
+

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java Thu May 18 01:18:34 2006
@@ -34,6 +34,9 @@
     /** Holds named endpoints (which results into absolute EPRs) for reuse */
     private Map namedEndpoints = new HashMap();
 
+    /** Holds named configurations (such as Spring configurations) */
+    private Map namedConfigurations = new HashMap();
+
     /** Holds global (system-wide) properties that apply to the synapse instance and every message */
     private Map globalProps = new HashMap();
 
@@ -110,5 +113,23 @@
      */
     public Endpoint getNamedEndpoint(String name) {
         return (Endpoint) namedEndpoints.get(name);
+    }
+
+    /**
+     * Define a named Configuration with the given name
+     * @param name the name of the Configuration
+     * @param config the Configuration definition
+     */
+    public void addNamedConfiguration(String name, Configuration config) {
+        namedConfigurations.put(name, config);
+    }
+
+    /**
+     * Get the configuration definition with the given name
+     * @param name to be looked up
+     * @return the Configuration which maps to this name
+     */
+    public Configuration getNamedConfiguration(String name) {
+        return (Configuration) namedConfigurations.get(name);
     }
 }

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactory.java?rev=407499&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactory.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactory.java Thu May 18 01:18:34 2006
@@ -0,0 +1,41 @@
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.synapse.config.xml;
+
+import org.apache.synapse.config.Configuration;
+import org.apache.axiom.om.OMElement;
+
+
+/**
+ * A configuration factory that is capable of creating an instance of a
+ * named Configuration, through a given XML, should implement this interface
+ */
+
+public interface ConfigurationFactory {
+    /**
+     * Creates an instance of a named Configuration using the OMElement
+     * @param elem
+     * @return the created named Configuration
+     */
+    public Configuration createConfiguration(OMElement elem);
+
+    /**
+     * The type attribute of a configuration definition, that this factory could handle
+     * @return the type of configuration definition
+     */
+    public String getType();
+
+}

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactoryFinder.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactoryFinder.java?rev=407499&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactoryFinder.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactoryFinder.java Thu May 18 01:18:34 2006
@@ -0,0 +1,122 @@
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.synapse.config.xml;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.config.Configuration;
+import org.apache.synapse.SynapseException;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMAttribute;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import sun.misc.Service;
+
+import javax.xml.namespace.QName;
+
+/**
+ *
+ *
+ * This class is based on J2SE Service Provider model
+ * http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Service%20Provider
+ */
+
+public class ConfigurationFactoryFinder {
+
+    private static Map factoryMap = new HashMap();
+    private static final Log log = LogFactory.getLog(ConfigurationFactoryFinder.class);
+    private static ConfigurationFactoryFinder instance = null;
+
+    public static synchronized ConfigurationFactoryFinder getInstance() {
+        if (instance == null) {
+            instance = new ConfigurationFactoryFinder();
+        }
+        return instance;
+    }
+
+    /**
+     * Force re initialization next time
+     */
+    public synchronized void reset() {
+        factoryMap.clear();
+        instance = null;
+    }
+
+    private ConfigurationFactoryFinder() {
+        factoryMap = new HashMap();
+        // now iterate through the available pluggable mediator factories
+        registerExtensions();
+    }
+
+    /**
+     * Register pluggable Configuration factories from the classpath
+     *
+     * This looks for JAR files containing a META-INF/services that adheres to the following
+     * http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Service%20Provider
+     */
+    private void registerExtensions() {
+
+        log.debug("registering extensions found in the classpath : " + System.getProperty("java.class.path"));
+
+        // register ConfigurationFactory extensions
+        Iterator it = Service.providers(ConfigurationFactory.class);
+        while (it.hasNext()) {
+            ConfigurationFactory cf = (ConfigurationFactory) it.next();
+            String type = cf.getType();
+            factoryMap.put(type, cf.getClass());
+            log.debug("Added ConfigurationFactory " + cf.getClass() +
+                " to handle '" + type + "' configuration definitions");
+        }
+    }
+
+    /**
+     * This method returns a Configuration of the correct type given an OMElement.
+     *
+     * @param elem an OMElement defining a named Configuration definition
+     * @return a correct Configuration object
+     */
+    public Configuration getConfiguration(OMElement elem) {
+
+        OMAttribute type = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "type"));
+        log.debug("getConfiguration( type = " + type.getAttributeValue() + " )");
+
+        Class cls = (Class) factoryMap.get(type.getAttributeValue());
+
+        if (cls == null) {
+            String msg = "Unknown Configuration factory referenced by type : " + type.getAttributeValue();
+            log.error(msg);
+            throw new SynapseException(msg);
+        }
+
+        try {
+            ConfigurationFactory cf = (ConfigurationFactory) cls.newInstance();
+            return cf.createConfiguration(elem);
+
+        } catch (InstantiationException e) {
+            String msg = "Error initializing Configuration factory : " + cls;
+            log.error(msg);
+            throw new SynapseException(msg, e);
+
+        } catch (IllegalAccessException e) {
+            String msg = "Error initializing Configuration factory : " + cls;
+            log.error(msg);
+            throw new SynapseException(msg, e);
+        }
+    }
+}

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/Constants.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/Constants.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/Constants.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/Constants.java Thu May 18 01:18:34 2006
@@ -25,6 +25,7 @@
     public static final QName DEFINITIONS_ELT = new QName("definitions");
     public static final QName SEQUENCE_ELT = new QName("sequence");
     public static final QName ENDPOINT_ELT = new QName("endpoint");
+    public static final QName CONFIG_ELT = new QName("configuration");
     public static final QName PROPERTY_ELT = new QName("set-property");
 
     public static final QName RULES_ELT = new QName("rules");

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java Thu May 18 01:18:34 2006
@@ -93,20 +93,27 @@
 				throw new SynapseException("Error instantiating " + c.getName(), e);
 			}
 		}
-        // TODO revisit later registerExtensions();
+        // now iterate through the available pluggable mediator factories
+        registerExtensions();
     }
 
-    //TODO revist later
+    /**
+     * Register pluggable mediator factories from the classpath
+     *
+     * This looks for JAR files containing a META-INF/services that adheres to the following
+     * http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Service%20Provider
+     */
     private void registerExtensions() {
-        log.debug("registering extensions");
-        log.debug(System.getProperty("java.class.path"));
-        // now try additional processors
+
+        log.debug("registering extensions found in the classpath : " + System.getProperty("java.class.path"));
+
+        // register MediatorFactory extensions
         Iterator it = Service.providers(MediatorFactory.class);
         while (it.hasNext()) {
             MediatorFactory mf = (MediatorFactory) it.next();
             QName tag = mf.getTagQName();
             factoryMap.put(tag, mf.getClass());
-            log.debug("added MediatorFactory " + mf.getClass() + " to handle " + tag);
+            log.debug("Added MediatorFactory " + mf.getClass() + " to handle " + tag);
         }
     }
 

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseConfigurationBuilder.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseConfigurationBuilder.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseConfigurationBuilder.java Thu May 18 01:18:34 2006
@@ -22,6 +22,7 @@
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.config.SynapseConfiguration;
 import org.apache.synapse.config.Endpoint;
+import org.apache.synapse.config.Configuration;
 import org.apache.synapse.mediators.base.SequenceMediator;
 import org.apache.synapse.mediators.base.SynapseMediator;
 import org.apache.commons.logging.Log;
@@ -43,6 +44,7 @@
 
     private static Log log = LogFactory.getLog(SynapseConfigurationBuilder.class);
     private SynapseConfiguration config = new SynapseConfiguration();
+    ConfigurationFactoryFinder configFacFinder = ConfigurationFactoryFinder.getInstance();
 
     public SynapseConfigurationBuilder() {}
 
@@ -56,9 +58,7 @@
         try {
             root = new StAXOMBuilder(is).getDocumentElement();
         } catch (XMLStreamException e) {
-            String msg = "Error parsing Synapse configuration : " + e.getMessage();
-            log.error(msg);
-            throw new SynapseException(msg);
+            handleException("Error parsing Synapse configuration : " + e.getMessage(), e);
         }
         root.build();
 
@@ -79,6 +79,13 @@
                 defineEndpoint(elt);
             }
 
+            // digest defined named Configurations
+            iter = definitions.getChildrenWithName(Constants.CONFIG_ELT);
+            while (iter.hasNext()) {
+                OMElement elt = (OMElement) iter.next();
+                defineConfiguration(elt);
+            }
+
             // digest defined Global properties
             iter = definitions.getChildrenWithName(Constants.PROPERTY_ELT);
             while (iter.hasNext()) {
@@ -89,15 +96,11 @@
 
         OMElement elem = root.getFirstChildWithName(Constants.RULES_ELT);
         if (elem == null) {
-            String msg = "A valid Synapse configuration MUST specify the main mediator using the <rules> element";
-            log.error(msg);
-            throw new SynapseException(msg);
+            handleException("A valid Synapse configuration MUST specify the main mediator using the <rules> element");
         } else {
             SynapseMediator sm = (SynapseMediator) MediatorFactoryFinder.getInstance().getMediator(elem);
             if (sm.getList().isEmpty()) {
-                String msg = "Invalid configuration, the main mediator specified by the <rules> element is empty";
-                log.error(msg);
-                throw new SynapseException(msg);
+                handleException("Invalid configuration, the main mediator specified by the <rules> element is empty");
             } else {
                 config.setMainMediator(sm);
             }
@@ -118,9 +121,7 @@
         OMAttribute name  = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "name"));
         OMAttribute value = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "value"));
         if (name == null || value == null) {
-            String msg = "The 'name' and 'value' attributes are required";
-            log.error(msg);
-            throw new SynapseException(msg);
+            handleException("The 'name' and 'value' attributes are required");
         }
         config.addProperty(name.getAttributeValue(), value.getAttributeValue());
     }
@@ -142,10 +143,7 @@
 
         OMAttribute name = ele.getAttribute(new QName(Constants.NULL_NAMESPACE, "name"));
         if (name == null) {
-            String msg = "The 'name' attribute is required for a named endpoint definition";
-            log.error(msg);
-            throw new SynapseException(msg);
-
+            handleException("The 'name' attribute is required for a named endpoint definition");
         } else {
             Endpoint endpoint = new Endpoint();
             endpoint.setName(name.getAttributeValue());
@@ -156,12 +154,43 @@
                     endpoint.setAddress(new URL(address.getAttributeValue()));
                     config.addNamedEndpoint(endpoint.getName(), endpoint);
                 } catch (MalformedURLException e) {
-                    String msg = "Invalid URL specified for 'address' : " + address.getAttributeValue();
-                    log.error(msg, e);
-                    throw new SynapseException(msg, e);
+                    handleException("Invalid URL specified for 'address' : " + address.getAttributeValue(), e);
                 }
             }
         }
     }
+
+    /**
+     * Digest a named configuratino definition and add it to the SynapseConfiguration
+     *
+     * <configuration name="string" type="string">
+     *    <property name="string" value="string"/>*
+     * </configuration>
+     * @param elem the XML element defining the configuration
+     */
+    private void defineConfiguration(OMElement elem) {
+
+        OMAttribute name = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "name"));
+        OMAttribute type = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "type"));
+
+        if (name == null) {
+            handleException("The 'name' attribute is required for a named configuration definition");
+        } else if (type == null) {
+            handleException("The 'type' attribute is required for a named configuration definition");
+        } else {
+            config.addNamedConfiguration(name.getAttributeValue(), configFacFinder.getConfiguration(elem));
+        }
+    }
+
+    private void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
+    }
+
+    private void handleException(String msg, Exception e) {
+        log.error(msg, e);
+        throw new SynapseException(msg, e);
+    }
+
 
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/AbstractListMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/AbstractListMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/AbstractListMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/AbstractListMediator.java Thu May 18 01:18:34 2006
@@ -38,7 +38,7 @@
     protected List mediators = new ArrayList();
 
     public boolean mediate(MessageContext synCtx) {
-        log.debug(getType() + " mediate()");
+        log.debug("Implicit Sequence <" + getType() + "> :: mediate()");
 
         Iterator it = mediators.iterator();
         while (it.hasNext()) {

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java Thu May 18 01:18:34 2006
@@ -30,6 +30,11 @@
      * @return the class name of the mediator
      */
     public String getType() {
-        return getClass().getName();
+        String cls = getClass().getName();
+        int p = cls.lastIndexOf(".");
+        if (p == -1)
+            return cls;
+        else
+            return cls.substring(p+1);
     }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java Thu May 18 01:18:34 2006
@@ -44,7 +44,7 @@
      * @return as per standard mediator result
      */
     public boolean mediate(MessageContext synCtx) {
-        log.debug(getType() + " mediate()");
+        log.debug("Sequence mediator <" + (name == null? "anonymous" : name ) +"> :: mediate()");
         if (ref == null) {
             return super.mediate(synCtx);
 

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SynapseMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SynapseMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SynapseMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/base/SynapseMediator.java Thu May 18 01:18:34 2006
@@ -17,6 +17,9 @@
 package org.apache.synapse.mediators.base;
 
 import org.apache.synapse.mediators.AbstractListMediator;
+import org.apache.synapse.MessageContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * The SynapseMediator is the "mainmediator" of the synapse engine. It is
@@ -28,4 +31,16 @@
  * @see org.apache.synapse.config.SynapseConfiguration#getMainMediator()
  */
 public class SynapseMediator extends AbstractListMediator {
+
+    private static final Log log = LogFactory.getLog(SynapseMediator.class);
+
+    /**
+     * Perform the mediation specified by the rule set
+     * @param synCtx the message context
+     * @return as per standard mediate() semantics
+     */
+    public boolean mediate(MessageContext synCtx) {
+        log.debug("Synapse main mediator :: mediate()");
+        return super.mediate(synCtx);
+    }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/DropMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/DropMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/DropMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/DropMediator.java Thu May 18 01:18:34 2006
@@ -34,7 +34,7 @@
      * @return false always
      */
     public boolean mediate(MessageContext synCtx) {
-        log.debug(getType() + " mediate()");
+        log.debug("Drop mediator :: mediate()");
         if (synCtx.getTo() == null) {
             return false;
         } else {

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/LogMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/LogMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/LogMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/LogMediator.java Thu May 18 01:18:34 2006
@@ -54,7 +54,7 @@
      * @return true always
      */
     public boolean mediate(MessageContext synCtx) {
-        log.debug(getType() + " mediate()");
+        log.debug("Log mediator :: mediate()");
         log.info(getLogMessage(synCtx));
         return true;
     }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/PropertyMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/PropertyMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/PropertyMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/PropertyMediator.java Thu May 18 01:18:34 2006
@@ -19,6 +19,8 @@
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.Util;
 import org.apache.axiom.om.xpath.AXIOMXPath;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * The property mediator would save a named property as a local property
@@ -31,14 +33,18 @@
     private String value = null;
     private AXIOMXPath expression = null;
 
+    private static final Log log = LogFactory.getLog(PropertyMediator.class);
+
     /**
      * Sets a property into the current (local) Synapse Context
      * @param smc the message context
      * @return true always
      */
     public boolean mediate(MessageContext smc) {
-        smc.setProperty(getName(),
-            (value != null ? getValue() : Util.getStringValue(getExpression(), smc)));
+        log.debug("Set-Property mediator :: mediate()");
+        String value = (getValue() != null ? getValue() : Util.getStringValue(getExpression(), smc));
+        log.debug("Setting property : " + getName() + " = " + value);
+        smc.setProperty(getName(), value);
         return true;
     }
 

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/SendMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/SendMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/SendMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/SendMediator.java Thu May 18 01:18:34 2006
@@ -50,7 +50,7 @@
      * @return false always as this is a leaf mediator
      */
     public boolean mediate(MessageContext synCtx) {
-        log.debug(getType() + " mediate()");
+        log.debug("Send mediator :: mediate()");
 
         // TODO this may be really strange but true.. unless you call the below, sometimes it
         // results in an unbound URI exception for no credible reason - needs more investigation
@@ -59,6 +59,7 @@
 
         // if no endpoints are defined, send where implicitly stated
         if (endpoints.isEmpty()) {
+            log.debug("Sending message using implicit message properties..");
             log.debug("Sending To: " + (synCtx.getTo() != null ?
                 synCtx.getTo().getAddress() : "null"));
             log.debug("SOAPAction: " + (synCtx.getWSAAction() != null ?
@@ -76,6 +77,9 @@
                     singleEndpoint.getRef());
                 eprAddress = singleEndpoint.getAddress().toString();
             }
+
+            log.debug("Sending message to endpoint :: name = " +
+                singleEndpoint.getName() + " resolved address = " + eprAddress);
 
             synCtx.setTo(new EndpointReference(eprAddress));
             log.debug("Sending To: " + (synCtx.getTo() != null ?

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/ValidateMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/ValidateMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/ValidateMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/builtin/ValidateMediator.java Thu May 18 01:18:34 2006
@@ -75,7 +75,7 @@
     /**
      * Default schema language (http://www.w3.org/2001/XMLSchema).
      */
-    private static final String DEFAULT_SCHEMA_LANGUAGE = XMLConstants.W3C_XML_SCHEMA_NS_URI;
+    private static final String DEFAULT_SCHEMA_LANGUAGE = "http://www.w3.org/2001/XMLSchema";
 
 
     public String getSchemaUrl() {
@@ -102,10 +102,15 @@
      */
     private OMNode getValidateSource(MessageContext synCtx) {
 
-        if (source == null) {
+        AXIOMXPath sourceXPath = source;
+        // do not change the source XPath if not specified, as it is shared..
+        // and will cause confusion to concurrent messages and erroneous results
+
+        if (sourceXPath == null) {
+            log.debug("validation source was not specified.. defaulting to SOAP Body");
             try {
-                source = new AXIOMXPath("//SOAP-ENV:Body/child::*");
-                source.addNamespace("SOAP-ENV", synCtx.isSOAP11() ?
+                sourceXPath = new AXIOMXPath("//SOAP-ENV:Body/child::*");
+                sourceXPath.addNamespace("SOAP-ENV", synCtx.isSOAP11() ?
                     SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI : SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
             } catch (JaxenException e) {
                 // this should not cause a runtime exception!
@@ -113,7 +118,7 @@
         }
 
         try {
-            Object o = source.evaluate(synCtx.getEnvelope());
+            Object o = sourceXPath.evaluate(synCtx.getEnvelope());
             if (o instanceof OMNode) {
                 return (OMNode) o;
             } else if (o instanceof List && !((List) o).isEmpty()) {
@@ -168,6 +173,7 @@
                 int sourceCount = st.countTokens();
 
                 if (sourceCount == 0) {
+                    log.debug("Schemas have not been specified..");
                     schema = factory.newSchema();
                 } else {
                     StreamSource[] sources = new StreamSource[sourceCount];
@@ -177,6 +183,7 @@
                     schema = factory.newSchema(sources);
                 }
             } else {
+                log.debug("Schemas have not been specified..");
                 schema = factory.newSchema();
             }
 

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java Thu May 18 01:18:34 2006
@@ -49,7 +49,7 @@
      */
     public boolean mediate(MessageContext synCtx) {
 
-        log.debug(getType() + " mediate()");
+        log.debug("Class mediator <" + clazz.getName() + ">:: mediate()");
         Mediator m = null;
         try {
             m = (Mediator) clazz.newInstance();
@@ -70,8 +70,10 @@
      * @param m the mediator
      */
     private void setProperties(Mediator m, MessageContext synCtx) {
+
         Iterator iter = properties.iterator();
         while (iter.hasNext()) {
+
             MediatorProperty mProp = (MediatorProperty) iter.next();
 
             String mName = "set" + Character.toUpperCase(mProp.getName().charAt(0)) + mProp.getName().substring(1);
@@ -79,9 +81,9 @@
                 mProp.getValue() :
                 Util.getStringValue(mProp.getExpression(), synCtx));
 
-
             try {
                 Method method = m.getClass().getMethod(mName, new Class[] {String.class});
+                log.debug("Setting property :: invoking method " + mName + "(" + value + ")");
                 method.invoke(m, new Object[] { value });
 
             } catch (Exception e) {

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java Thu May 18 01:18:34 2006
@@ -43,10 +43,12 @@
      * @return true if filter condition fails. else returns as per List mediator semantics
      */
     public boolean mediate(MessageContext synCtx) {
-        log.debug(getType() + " mediate()");
+        log.debug("Filter mediator mediate()");
         if (test(synCtx)) {
+            log.debug("Filter condition satisfied.. executing child mediators");
             return super.mediate(synCtx);
         } else {
+            log.debug("Filter condition failed.. will skip executing child mediators");
             return true;
         }
     }
@@ -62,9 +64,11 @@
     public boolean test(MessageContext synCtx) {
         try {
             if (xpath != null) {
+                log.debug("Evaluating XPath expression : " + xpath);
                 return xpath.booleanValueOf(synCtx.getEnvelope());
 
             } else if (source != null && regex != null) {
+                log.debug("Evaluating regular expression : " + regex + " against source : " + source);
                 return regex.matcher(Util.getStringValue(source, synCtx)).matches();
 
             } else {

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/InMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/InMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/InMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/InMediator.java Thu May 18 01:18:34 2006
@@ -37,10 +37,12 @@
      * @return true if filter condition fails. else returns as per List mediator semantics
      */
     public boolean mediate(MessageContext synCtx) {
-        log.debug(getType() + " mediate()");
+        log.debug("In mediator mediate()");
         if (test(synCtx)) {
+            log.debug("Current message is incoming.. executing child mediators");
             return super.mediate(synCtx);
         } else {
+            log.debug("Current message is not incoming.. skip executing child mediators");
             return true;
         }
     }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/OutMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/OutMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/OutMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/OutMediator.java Thu May 18 01:18:34 2006
@@ -37,10 +37,12 @@
      * @return true if filter condition fails. else returns as per List mediator semantics
      */
     public boolean mediate(MessageContext synCtx) {
-        log.debug(getType() + " mediate()");
+        log.debug("Out mediator mediate()");
         if (test(synCtx)) {
+            log.debug("Current message is outgoing.. executing child mediators");
             return super.mediate(synCtx);
         } else {
+            log.debug("Current message is not outgoing.. executing child mediators");
             return true;
         }
     }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/SwitchCaseMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/SwitchCaseMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/SwitchCaseMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/SwitchCaseMediator.java Thu May 18 01:18:34 2006
@@ -16,6 +16,8 @@
 package org.apache.synapse.mediators.filters;
 
 import org.apache.synapse.mediators.AbstractListMediator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import java.util.regex.Pattern;
 import java.util.List;
@@ -26,7 +28,11 @@
  */
 public class SwitchCaseMediator extends AbstractListMediator {
 
+    private static final Log log = LogFactory.getLog(SwitchCaseMediator.class);
+
+    /** The regular expression pattern to be used */
     private Pattern regex = null;
+    /** Is this the default case? */
     private boolean defaultCase = false;
 
     public SwitchCaseMediator() {}
@@ -54,8 +60,12 @@
     }
 
     public boolean matches(String value) {
-        if (isDefaultCase())
+        if (isDefaultCase()) {
+            log.debug("This is the default case of the switch");
             return true;
-        return regex.matcher(value).matches();
+        }
+        boolean retVal = regex.matcher(value).matches();
+        log.debug("Case : " + regex + " evaluated to : " + retVal);
+        return retVal;
     }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/SwitchMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/SwitchMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/SwitchMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/filters/SwitchMediator.java Thu May 18 01:18:34 2006
@@ -36,8 +36,11 @@
 
     private static final Log log = LogFactory.getLog(SwitchMediator.class);
 
+    /** The XPath expression specifying the source element to apply the switch case expressions against */
     private AXIOMXPath source = null;
+    /** The list of switch cases */
     private List cases = new ArrayList();
+    /** The default switch case, if any */
     private SwitchCaseMediator defaultCase = null;
 
     /**
@@ -47,7 +50,9 @@
      */
     public boolean mediate(MessageContext synCtx) {
 
+        log.debug("Switch mediator :: mediate()");
         String sourceText = Util.getStringValue(source, synCtx);
+        log.debug("Applying switch case regex patterns against evaluated source value : " + sourceText);
         Iterator iter = cases.iterator();
 
         while (iter.hasNext()) {
@@ -58,6 +63,7 @@
         }
 
         if (defaultCase != null) {
+            log.debug("Executing default switch case");
             return defaultCase.mediate(synCtx);
         }
 

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java Thu May 18 01:18:34 2006
@@ -69,7 +69,7 @@
     private String faultDetail = null;
 
     public boolean mediate(MessageContext synCtx) {
-        log.debug(getType() + " mediate()");
+        log.debug("Fault mediator mediate()");
         SOAPEnvelope envelop = synCtx.getEnvelope();
 
         switch (soapVersion) {
@@ -93,6 +93,7 @@
 
     private boolean makeSOAPFault(MessageContext synCtx, int soapVersion) {
 
+        log.debug("Creating a SOAP fault using SOAP " + (soapVersion == SOAP11 ? "1.1" : "1.2"));
         // get the correct SOAP factory to be used
         SOAPFactory factory = (
             soapVersion == SOAP11 ? OMAbstractFactory.getSOAP11Factory() : OMAbstractFactory.getSOAP12Factory());
@@ -114,6 +115,7 @@
 
         // set the fault element
         faultEnvelope.getBody().setFirstChild(fault);
+        log.debug("Setting the fault message as : " + fault);
 
         // set the fault message "to" header to the "faultTo" of the original message if
         // such a header existed on the original message, else set it to the "replyTo" of the original
@@ -121,10 +123,14 @@
         EndpointReference toEPR = synCtx.getTo();
         EndpointReference faultToEPR = synCtx.getFaultTo();
         if (faultToEPR != null) {
+            log.debug("Setting fault message To : " + faultToEPR);
+            log.debug("Setting fault message ReplyTo : " + toEPR);
             synCtx.setTo(faultToEPR);
             synCtx.setReplyTo(toEPR);
         } else {
             EndpointReference replyToEPR = synCtx.getReplyTo();
+            log.debug("Setting fault message To : " + replyToEPR);
+            log.debug("Setting fault message ReplyTo : " + toEPR);
             synCtx.setTo(replyToEPR);
             synCtx.setReplyTo(toEPR);
         }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/HeaderMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/HeaderMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/HeaderMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/HeaderMediator.java Thu May 18 01:18:34 2006
@@ -47,7 +47,7 @@
     private int action = ACTION_SET;
     /** An expression which should be evaluated, and the result set as the header value */
     private AXIOMXPath expression = null;
-
+    /** The header type to which this mediator applies to */
     private HeaderType headerType = new HeaderType();
 
     /**
@@ -57,15 +57,16 @@
      * @return true always
      */
     public boolean mediate(MessageContext synCtx) {
-        log.debug(getType() + " mediate()");
+        log.debug("Header mediator <" + (action == ACTION_SET ? "Set" : "Remove") + "> :: mediate()");
 
         if (action == ACTION_SET) {
-            headerType.setHeader(
-                synCtx,
-                (getValue() != null ? getValue() :
-                    Util.getStringValue(getExpression(), synCtx)));
+            String value = (getValue() != null ? getValue() :
+                    Util.getStringValue(getExpression(), synCtx));
+            log.debug("Setting header : " + headerType.getHeaderType() + " to : " + value);
+            headerType.setHeader(synCtx, value);
 
         } else {
+            log.debug("Removing header : " + headerType.getHeaderType() + " from current message");
             headerType.removeHeader(synCtx);
         }
         return true;

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java Thu May 18 01:18:34 2006
@@ -3,6 +3,7 @@
 
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.OMContainer;
+import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axiom.om.xpath.AXIOMXPath;
 import org.apache.axiom.soap.SOAPEnvelope;
@@ -52,16 +53,17 @@
      * @return true always
      */
     public boolean mediate(MessageContext synCtx) {
-        log.debug(getType() + " mediate()");
+        log.debug("Transform mediator mediate()");
 
         if (xsltUrl != null) {
+            log.debug("Performing XSLT transformation against : " + xsltUrl);
             performXLST(synCtx);
             return true;
 
         } else if (xQueryUrl != null) {
             //TODO later revisit later
-            System.err.println("Unimplemented functionality..");
-            return true;
+            log.error("Unimplemented functionality : XQuery transformation");
+            throw new UnsupportedOperationException("XQuery transformation is not yet supported");
 
         } else {
             log.error("Invalid configuration - xslt/xq not specified");
@@ -80,6 +82,7 @@
             XMLStreamWriter xsWriterForSource = XMLOutputFactory.newInstance().createXMLStreamWriter(baosForSource);
 
             OMNode sourceNode = getTransformSource(synCtx);
+            log.debug("Transformation source : " + sourceNode);
             sourceNode.serialize(xsWriterForSource);
             Source transformSrc = new StreamSource(new ByteArrayInputStream(baosForSource.toByteArray()));
 
@@ -92,13 +95,15 @@
 
             StAXOMBuilder builder = new StAXOMBuilder(new ByteArrayInputStream(baosForTarget.toByteArray()));
             OMContainer parent = sourceNode.getParent();
+            OMElement result = builder.getDocumentElement();
+            log.debug("Transformation result : " + result);
 
             if (parent instanceof SOAPEnvelope) {
                 ((SOAPEnvelope) parent).getBody().getFirstOMChild().detach();
-                ((SOAPEnvelope) parent).getBody().setFirstChild(builder.getDocumentElement());
+                ((SOAPEnvelope) parent).getBody().setFirstChild(result);
             } else {
                 parent.getFirstOMChild().detach();
-                parent.addChild(builder.getDocumentElement());
+                parent.addChild(result);
             }
 
         } catch (MalformedURLException mue) {
@@ -116,16 +121,22 @@
 
     private OMNode getTransformSource(MessageContext synCtx) {
 
-        if (source == null) {
+        // Do not change source, if none was specified. else will cause issues
+        // for concurrent messages and reuse of the mediator instance
+        AXIOMXPath sourceXPath = source;
+
+        if (sourceXPath == null) {
             try {
-                source = new AXIOMXPath("//SOAP-ENV:Body");
-                source.addNamespace("SOAP-ENV", synCtx.isSOAP11() ?
+                log.debug("Transform source XPath was not specified.. defaulting to SOAP Body");
+                sourceXPath = new AXIOMXPath("//SOAP-ENV:Body");
+                sourceXPath.addNamespace("SOAP-ENV", synCtx.isSOAP11() ?
                     SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI : SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
             } catch (JaxenException e) {}
         }
 
         try {
-            Object o = source.evaluate(synCtx.getEnvelope());;
+            log.debug("Transformation against source element evaluated by : " + sourceXPath);
+            Object o = sourceXPath.evaluate(synCtx.getEnvelope());
             if (o instanceof OMNode) {
                 return (OMNode) o;
             } else if (o instanceof List && !((List) o).isEmpty()) {

Modified: incubator/synapse/trunk/java/modules/extensions/project.xml
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/project.xml?rev=407499&r1=407498&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/project.xml (original)
+++ incubator/synapse/trunk/java/modules/extensions/project.xml Thu May 18 01:18:34 2006
@@ -44,7 +44,8 @@
                 <resource>
                     <directory>src</directory>
                     <includes>
-                        <include>**/org.apache.synapse.xml.MediatorFactory</include>
+                        <include>**/org.apache.synapse.config.xml.MediatorFactory</include>
+                        <include>**/org.apache.synapse.config.xml.ConfigurationFactory</include>
                     </includes>
                 </resource>
             </resources>

Added: incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ConfigurationFactory
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ConfigurationFactory?rev=407499&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ConfigurationFactory (added)
+++ incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ConfigurationFactory Thu May 18 01:18:34 2006
@@ -0,0 +1 @@
+org.apache.synapse.config.xml.SpringConfigurationFactory
\ No newline at end of file

Copied: incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.MediatorFactory (from r405612, incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.xml.MediatorFactory)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.MediatorFactory?p2=incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.MediatorFactory&p1=incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.xml.MediatorFactory&r1=405612&r2=407499&rev=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.xml.MediatorFactory (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.MediatorFactory Thu May 18 01:18:34 2006
@@ -1 +1 @@
-org.apache.synapse.mediators.spring.SpringMediatorFactory
\ No newline at end of file
+org.apache.synapse.config.xml.SpringMediatorFactory
\ No newline at end of file

Added: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfiguration.java?rev=407499&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfiguration.java (added)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfiguration.java Thu May 18 01:18:34 2006
@@ -0,0 +1,48 @@
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.synapse.config;
+
+import org.springframework.context.support.GenericApplicationContext;
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
+import org.springframework.core.io.FileSystemResource;
+import org.apache.synapse.config.xml.SpringConfigurationFactory;
+
+public class SpringConfiguration extends Configuration {
+
+    /** This is the Spring ApplicationContext/BeanFactory */
+    GenericApplicationContext appContext = null;
+
+    public static final String SPRING_TYPE = "spring";
+
+    /**
+     * Create a Spring configuration from the given configuration
+     * @param configFile the configuration file to be used
+     */
+    public SpringConfiguration(String name, String configFile) {
+        super.setName(name);
+        super.setType(SPRING_TYPE);
+        appContext = new GenericApplicationContext();
+        XmlBeanDefinitionReader xbdr = new XmlBeanDefinitionReader(appContext);
+        xbdr.setValidating(false);
+        xbdr.loadBeanDefinitions(new FileSystemResource(configFile));
+        appContext.refresh();
+    }
+
+    public GenericApplicationContext getAppContext() {
+        return appContext;
+    }
+
+}

Added: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigurationFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigurationFactory.java?rev=407499&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigurationFactory.java (added)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigurationFactory.java Thu May 18 01:18:34 2006
@@ -0,0 +1,64 @@
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+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.config.Configuration;
+import org.apache.synapse.config.SpringConfiguration;
+
+import javax.xml.namespace.QName;
+import java.util.Iterator;
+
+public class SpringConfigurationFactory implements ConfigurationFactory {
+
+    private static final Log log = LogFactory.getLog(SpringConfigurationFactory.class);
+
+    private static final String CONFIG_NAME = "config_name";
+
+    /**
+     * <configuration name="string" type="spring">
+     *    <property name="config_src" value="string"/>
+     *    <property>*
+     * </configuration>
+     *
+     * @param elem
+     * @return A named Spring Configuration
+     */
+    public Configuration createConfiguration(OMElement elem) {
+
+        Iterator iter = elem.getChildrenWithName(new QName(Constants.NULL_NAMESPACE, "property"));
+        while (iter.hasNext()) {
+            Object o = iter.next();
+            if (o instanceof OMElement) {
+                OMElement prop = (OMElement) o;
+                OMAttribute name = prop.getAttribute(new QName(Constants.NULL_NAMESPACE, "name"));
+                OMAttribute value = prop.getAttribute(new QName(Constants.NULL_NAMESPACE, "value"));
+
+                if (name != null && value != null && CONFIG_NAME.equals(name.getAttributeValue())) {
+                    return new SpringConfiguration(name.getAttributeValue(), value.getAttributeValue());
+                }
+            }
+        }
+        return null;
+    }
+
+    public String getType() {
+        return SpringConfiguration.SPRING_TYPE;
+    }
+}

Added: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java?rev=407499&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java (added)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java Thu May 18 01:18:34 2006
@@ -0,0 +1,69 @@
+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.config.SpringConfiguration;
+import org.apache.synapse.api.Mediator;
+import org.apache.synapse.mediators.ext.spring.SpringMediator;
+
+import javax.xml.namespace.QName;
+
+/**
+ * Creates an instance of a Spring mediator that refers to the given Spring
+ * configuration and bean.
+ * <p/>
+ * <spring ref_bean="exampleBean1" (config_name="spring1" | config_src="spring.xml)"/>
+ */
+public class SpringMediatorFactory implements MediatorFactory {
+
+    private static final Log log = LogFactory.getLog(SpringMediatorFactory.class);
+
+    private static final QName tagName = new QName(Constants.SYNAPSE_NAMESPACE, "spring");
+
+    /**
+     * Create a Spring mediator instance referring to the bean and configuration given
+     * by the OMElement declaration
+     *
+     * @param elem the OMElement that specifies the Spring mediator configuration
+     * @return the Spring mediator instance created
+     */
+    public Mediator createMediator(OMElement elem) {
+
+        SpringMediator sm = new SpringMediator();
+        OMAttribute ref = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "ref_bean"));
+        OMAttribute cfg = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "config_name"));
+        OMAttribute src = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "config_src"));
+
+        if (ref == null) {
+            handleException("The 'ref_bean' attribute is required for a Spring mediator definition");
+        } else if (cfg == null && src == null) {
+            handleException("A 'config_name' or 'config_src' attribute is required for a Spring mediator definition");
+
+        } else {
+            sm.setBeanName(ref.getAttributeValue());
+            if (cfg != null) {
+                sm.setConfigName(cfg.getAttributeValue());
+
+            } else {
+                log.debug("Creating an anonymous Spring configuration using source : " + src.getAttributeValue());
+                SpringConfiguration sc = new SpringConfiguration("anonymous", src.getAttributeValue());
+                sm.setAppContext(sc.getAppContext());
+            }
+            return sm;
+        }
+        return null;
+    }
+
+    private void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
+    }
+
+    public QName getTagQName() {
+        return tagName;
+    }
+
+}

Modified: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java?rev=407499&r1=405612&r2=407499&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java Thu May 18 01:18:34 2006
@@ -1,15 +1,32 @@
-package org.apache.synapse.mediators.spring;
-
-import org.apache.synapse.SynapseMessage;
-
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.synapse.mediators.ext.spring;
+
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.config.Configuration;
+import org.apache.synapse.config.SpringConfiguration;
 import org.apache.synapse.api.Mediator;
-
-import org.springframework.context.support.GenericApplicationContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.context.ApplicationContext;
 
 /**
- *
- * @see org.apache.synapse.mediators.base.builtin.xslt.XSLTProcessorConfigurator
- * <p> This class is the class that "plugs" Spring-based mediators into Synapse. 
+ * This mediator allows
+ * <p> This class is the class that "plugs" Spring-based mediators into Synapse.
  * <p> A spring based mediator is any object that implements mediator and can be instantiated by
  * Spring (see www.springframework.org). The mediator definition is set up using the 
  *  SpringMediatorProcessorConfigurator class.
@@ -19,36 +36,93 @@
  *
  */
 public class SpringMediator implements Mediator {
-	
-	private GenericApplicationContext ctx = null;
-
-	private String beanName = null;
-
-	public boolean mediate(SynapseMessage smc) {
-		Mediator m = (Mediator) getContext().getBean(getBeanName());
-/*		if (EnvironmentAware.class.isAssignableFrom(m.getClass())) {
-			((EnvironmentAware) m).setSynapseEnvironment(se);
-		}*/
-		return m.mediate(smc);
-
-	}
-
-	
-
-	public void setContext(GenericApplicationContext ctx) {
-		this.ctx = ctx;
-	}
-
-	public GenericApplicationContext getContext() {
-		return ctx;
-	}
-
-	public void setBeanName(String beanName) {
-		this.beanName = beanName;
-	}
 
-	public String getBeanName() {
-		return beanName;
-	}
+    private static final Log log = LogFactory.getLog(SpringMediator.class);
 
+    /** The Spring bean ref to be used */
+    private String beanName = null;
+    /** The named Spring configName to be used */
+    private String configName = null;
+    /** The Spring ApplicationContext to be used */
+    private ApplicationContext appContext = null;
+
+    public boolean mediate(MessageContext synCtx) {
+
+        if (beanName == null) {
+            handleException("The bean name for the Spring mediator has not been specified");
+        }
+
+        // if a named configuration is referenced, use it
+        if (configName != null) {
+            // get named Spring configName
+            Configuration config = synCtx.getConfiguration().getNamedConfiguration(configName);
+
+            if (config != null && config instanceof SpringConfiguration) {
+
+                ApplicationContext appContext = ((SpringConfiguration) config).getAppContext();
+                Object o = appContext.getBean(beanName);
+
+                if (o != null && Mediator.class.isAssignableFrom(o.getClass())) {
+                    Mediator m = (Mediator) o;
+                    return m.mediate(synCtx);
+
+                } else {
+                    handleException("Could not find the bean named : " + beanName +
+                        " from the Spring configuration named : " + configName);
+                }
+            } else {
+                handleException("Could not get a reference to the Spring configuration named : " + configName);
+            }
+
+        } else if (appContext != null) {
+
+            Object o = appContext.getBean(beanName);
+
+            if (o != null && Mediator.class.isAssignableFrom(o.getClass())) {
+                Mediator m = (Mediator) o;
+                return m.mediate(synCtx);
+
+            } else {
+                handleException("Could not find the bean named : " + beanName +
+                    " from the anonymous Spring configuration");
+            }
+
+        } else {
+            handleException("A named Spring configuration or an ApplicationContext has not been specified");
+        }
+        return true;
+    }
+
+    private void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
+    }
+
+    public void setBeanName(String beanName) {
+        this.beanName = beanName;
+    }
+
+    public String getBeanName() {
+        return beanName;
+    }
+
+    public String getConfigName() {
+        return configName;
+    }
+
+    public void setConfigName(String configName) {
+        this.configName = configName;
+    }
+
+    public ApplicationContext getAppContext() {
+        return appContext;
+    }
+
+    public void setAppContext(ApplicationContext appContext) {
+        this.appContext = appContext;
+    }
+
+    public String getType() {
+        return "SpringMediator";
+    }
 }

Added: incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/TestMessageContext.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/TestMessageContext.java?rev=407499&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/TestMessageContext.java (added)
+++ incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/TestMessageContext.java Thu May 18 01:18:34 2006
@@ -0,0 +1,189 @@
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.synapse;
+
+import org.apache.synapse.config.SynapseConfiguration;
+import org.apache.synapse.core.SynapseEnvironment;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.addressing.RelatesTo;
+import org.apache.axis2.AxisFault;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Set;
+
+public class TestMessageContext implements MessageContext {
+
+    private Map properties = new HashMap();
+
+    private SynapseConfiguration synCfg = null;
+
+    SOAPEnvelope envelope = null;
+
+    private EndpointReference to = null;
+
+    public SynapseConfiguration getConfiguration() {
+        return synCfg;
+    }
+
+    public void setConfiguration(SynapseConfiguration cfg) {
+        this.synCfg = cfg;
+    }
+
+    public SynapseEnvironment getEnvironment() {
+        return null;
+    }
+
+    public void setEnvironment(SynapseEnvironment se) {
+    }
+
+    public Object getProperty(String key) {
+        Object ret = properties.get(key);
+        if (ret != null) {
+            return ret;
+        } else if (getConfiguration() != null) {
+            return getConfiguration().getProperty(key);
+        } else {
+            return null;
+        }
+    }
+
+    public void setProperty(String key, Object value) {
+        properties.put(key, value);
+    }
+
+    public Set getPropertyKeySet() {
+        return properties.keySet();
+    }
+
+    //---------
+    public SOAPEnvelope getEnvelope() {
+        if (envelope == null)
+            return OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();
+        else
+            return envelope;
+    }
+
+    public void setEnvelope(SOAPEnvelope envelope) throws AxisFault {
+        this.envelope = envelope;
+    }
+
+    public EndpointReference getFaultTo() {
+        return null;
+    }
+
+    public void setFaultTo(EndpointReference reference) {
+    }
+
+    public EndpointReference getFrom() {
+        return null;
+    }
+
+    public void setFrom(EndpointReference reference) {
+    }
+
+    public String getMessageID() {
+        return null;
+    }
+
+    public void setMessageID(String string) {
+    }
+
+    public RelatesTo getRelatesTo() {
+        return null;
+    }
+
+    public void setRelatesTo(RelatesTo[] reference) {
+    }
+
+    public EndpointReference getReplyTo() {
+        return null;
+    }
+
+    public void setReplyTo(EndpointReference reference) {
+    }
+
+    public EndpointReference getTo() {
+        return to;
+    }
+
+    public void setTo(EndpointReference reference) {
+        to = reference;
+    }
+
+    public void setWSAAction(String actionURI) {
+    }
+
+    public String getWSAAction() {
+        return null;
+    }
+
+    public String getSoapAction() {
+        return null;
+    }
+
+    public void setSoapAction(String string) {
+    }
+
+    public void setMessageId(String messageID) {
+    }
+
+    public String getMessageId() {
+        return null;
+    }
+
+    public boolean isDoingMTOM() {
+        return false;
+    }
+
+    public void setDoingMTOM(boolean b) {
+    }
+
+    public boolean isDoingREST() {
+        return false;
+    }
+
+    public void setDoingREST(boolean b) {
+    }
+
+    public boolean isSOAP11() {
+        return envelope.getNamespace().getName().equals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+    }
+
+    public void setResponse(boolean b) {
+    }
+
+    public boolean isResponse() {
+        return false;
+    }
+
+    public void setFaultResponse(boolean b) {
+    }
+
+    public boolean isFaultResponse() {
+        return false;
+    }
+
+    public MessageContext getSynapseContext() {
+        return null;
+    }
+
+    public void setSynapseContext(MessageContext env) {
+    }
+}

Added: incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/TestUtils.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/TestUtils.java?rev=407499&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/TestUtils.java (added)
+++ incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/TestUtils.java Thu May 18 01:18:34 2006
@@ -0,0 +1,48 @@
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.synapse;
+
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMDocument;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLInputFactory;
+import java.io.StringReader;
+
+public class TestUtils {
+
+    public static TestMessageContext getTestContext(String bodyText) throws Exception {
+
+        // create a test synapse context
+        TestMessageContext synCtx = new TestMessageContext();
+
+        SOAPEnvelope envelope = OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();
+        OMDocument omDoc = OMAbstractFactory.getSOAP11Factory().createOMDocument();
+        omDoc.addChild(envelope);
+
+        XMLStreamReader parser = XMLInputFactory.newInstance().
+            createXMLStreamReader(new StringReader(bodyText));
+        StAXOMBuilder builder = new StAXOMBuilder(parser);
+
+        // set a dummy static message
+        envelope.getBody().addChild(builder.getDocumentElement());
+
+        synCtx.setEnvelope(envelope);
+        return synCtx;
+    }
+}

Added: incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringMediatorTest.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringMediatorTest.java?rev=407499&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringMediatorTest.java (added)
+++ incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringMediatorTest.java Thu May 18 01:18:34 2006
@@ -0,0 +1,48 @@
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.synapse.spring;
+
+import junit.framework.TestCase;
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.config.xml.SynapseConfigurationBuilder;
+import org.apache.synapse.TestUtils;
+
+import java.io.FileInputStream;
+
+/**
+ * This unit test is a different 'type' of a unit test, such that it tests end-to-end
+ * like scenario of using Spring extensions! First it tests that the configuration
+ * builder properly looks up specified named and anonymous spring configurations
+ * and mediates properly to Spring mediator beans. The public static invokeCounter field
+ * though ugly, serves the purpose to test that the Spring beans were properly created
+ * and invoked
+ */
+public class SpringMediatorTest extends TestCase {
+
+    public void testSpringBean() throws Exception {
+
+        SynapseConfigurationBuilder synCfgBuilder = new SynapseConfigurationBuilder();
+        synCfgBuilder.setConfiguration(
+            new FileInputStream("./../../repository/conf/sample/synapse_sample_3.xml"));
+
+        MessageContext msgCtx = TestUtils.getTestContext("<dummy/>");
+        msgCtx.setConfiguration(synCfgBuilder.getConfig());
+        msgCtx.getConfiguration().getMainMediator().mediate(msgCtx);
+
+        assertEquals(TestMediateHandlerImpl.invokeCount, 2);
+    }
+
+}



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