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

svn commit: r419435 - in /incubator/synapse/trunk/java: modules/core/src/org/apache/synapse/config/xml/ modules/extensions/src/META-INF/services/ modules/extensions/src/org/apache/synapse/config/ modules/extensions/src/org/apache/synapse/json/ modules/...

Author: asankha
Date: Wed Jul  5 21:51:15 2006
New Revision: 419435

URL: http://svn.apache.org/viewvc?rev=419435&view=rev
Log:
1) Allow mediator factories to expose the XML schema to be used for the configuration of the mediators.
2) Create schema support for all core and extension mediators
3) Re-factor packages of extensions to be consistent
4) Fix sample spring configuration used for unit tests

Added:
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/Util.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/CDL.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/CDL.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/Cookie.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/Cookie.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/CookieList.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/CookieList.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/HTTP.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/HTTP.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/HTTPTokener.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/HTTPTokener.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JSONArray.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/JSONArray.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JSONException.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/JSONException.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JSONObject.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/JSONObject.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JSONStringer.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/JSONStringer.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JSONTokener.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/JSONTokener.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JSONWriter.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/JSONWriter.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JsonMediator.java
      - copied, changed from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/json/JsonMediator.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JsonMediatorFactory.java
      - copied, changed from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/JsonMediatorFactory.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/SynapseJsonSender.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/SynapseJsonSender.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/XML.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/XML.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/XMLTokener.java
      - copied unchanged from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/XMLTokener.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringConfigExtension.java
      - copied, changed from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfigExtension.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringConfigExtensionFactory.java
      - copied, changed from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigExtensionFactory.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringMediator.java
      - copied, changed from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringMediatorFactory.java
      - copied, changed from r418981, 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/transform/TransformMediatorFactory.java
      - copied, changed from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/TransformMediatorFactory.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/validate/
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/validate/ValidateMediator.java
      - copied, changed from r418995, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ValidateMediator.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/validate/ValidateMediatorFactory.java
      - copied, changed from r418995, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/ValidateMediatorFactory.java
Removed:
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/json/
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ValidateMediator.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/
Modified:
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/AbstractMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ClassMediatorFactory.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/DropMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/FaultMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/FilterMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/HeaderMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/InMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/LogMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactory.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/OutMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/PropertyMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SendMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SequenceMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SwitchMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseMediatorFactory.java
    incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ExtensionFactory
    incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.MediatorFactory
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/javascript/JavaScriptMediatorFactory.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/transform/TransformMediator.java
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/ValidateMediatorTest.java
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/json/JsonMediatorTest.java
    incubator/synapse/trunk/java/repository/conf/sample/synapse_spring_unittest.xml

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/AbstractMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/AbstractMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/AbstractMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/AbstractMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -22,12 +22,23 @@
 import org.apache.axiom.om.xpath.AXIOMXPath;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.Util;
+import org.apache.ws.commons.schema.XmlSchema;
 import org.jaxen.JaxenException;
 
+import javax.xml.namespace.QName;
 import java.util.Iterator;
 
 /**
  * Is the abstract superclass of MediatorFactory's
  */
 public abstract class AbstractMediatorFactory implements MediatorFactory {
+
+    public QName getTagSchemaType() {
+        return new QName(Constants.SYNAPSE_NAMESPACE,
+            getTagQName().getLocalPart() + "_type", "synapse");
+    }
+
+    public XmlSchema getTagSchema() {
+        return null; // not supported
+    }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ClassMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ClassMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ClassMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ClassMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -16,6 +16,7 @@
 package org.apache.synapse.config.xml;
 
 import javax.xml.namespace.QName;
+import javax.xml.transform.stream.StreamSource;
 
 import org.apache.synapse.config.xml.Constants;
 import org.apache.synapse.SynapseException;
@@ -25,8 +26,11 @@
 import org.apache.axiom.om.OMAttribute;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
 
 import java.util.Iterator;
+import java.io.StringReader;
 
 /**
  * Creates an instance of a Class mediator using XML configuration specified
@@ -43,6 +47,19 @@
 
     private static final QName CLASS_Q = new QName(Constants.SYNAPSE_NAMESPACE, "class");
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"class\" type=\"class_type\"/>\n" +
+        "\t<xs:complexType name=\"class_type\">\n" +
+        "\t\t<xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n" +
+        "\t\t\t<xs:element name=\"property\" type=\"synapse:property_type\"/>\n" +
+        "\t\t</xs:sequence>\n" +
+        "\t\t<xs:attribute name=\"name\"/>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA = Util.getSchema(STR_SCHEMA, CLASS_Q);        
+
     public Mediator createMediator(OMElement elem) {
 
         ClassMediator classMediator = new ClassMediator();
@@ -71,5 +88,9 @@
 
     public QName getTagQName() {
         return CLASS_Q;
+    }
+
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
     }
 }

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=419435&r1=419434&r2=419435&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 Wed Jul  5 21:51:15 2006
@@ -33,4 +33,12 @@
     public static final String NULL_NAMESPACE    = "";
     public static final String OUTFLOW_SECURITY  = "OutflowSecurity";
     public static final String INFLOW_SECURITY   = "InflowSecurity";
+
+    public static final String SCHEMA_PROLOG =
+        "<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" " +
+            "elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\" " +
+            "xmlns:synapse=\"http://ws.apache.org/ns/synapse\" " +
+            "targetNamespace=\"http://ws.apache.org/ns/synapse\">\n";
+
+    public static final String SCHEMA_EPILOG = "</xs:schema>\n";
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/DropMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/DropMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/DropMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/DropMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -20,8 +20,12 @@
 import org.apache.synapse.api.Mediator;
 import org.apache.synapse.mediators.builtin.DropMediator;
 import org.apache.axiom.om.OMElement;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
 
 import javax.xml.namespace.QName;
+import javax.xml.transform.stream.StreamSource;
+import java.io.StringReader;
 
 /**
  * This creates a drop mediator instance
@@ -34,11 +38,23 @@
 
     private static final QName DROP_Q = new QName(Constants.SYNAPSE_NAMESPACE, "drop");
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"drop\" type=\"drop_type\"/>\n" +
+        "\t<xs:complexType name=\"drop_type\"/>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA = Util.getSchema(STR_SCHEMA, DROP_Q);
+
     public Mediator createMediator(OMElement el) {
         return new DropMediator();
     }
 
     public QName getTagQName() {
         return DROP_Q;
+    }
+
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
     }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/FaultMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/FaultMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/FaultMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/FaultMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -27,6 +27,7 @@
 import org.apache.axiom.om.xpath.AXIOMXPath;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ws.commons.schema.XmlSchema;
 import org.jaxen.JaxenException;
 
 import java.net.URI;
@@ -47,13 +48,13 @@
  */
 public class FaultMediatorFactory extends AbstractMediatorFactory {
 
-    private static final QName HEADER_Q = new QName(Constants.SYNAPSE_NAMESPACE, "makefault");
+    private static final QName FAULT_Q = new QName(Constants.SYNAPSE_NAMESPACE, "makefault");
 
     private static final QName ATT_VERSION_Q = new QName(Constants.NULL_NAMESPACE, "version");
     private static final QName CODE_Q        = new QName(Constants.SYNAPSE_NAMESPACE, "code");
     private static final QName REASON_Q      = new QName(Constants.SYNAPSE_NAMESPACE, "reason");
-    private static final QName NODE_Q      = new QName(Constants.SYNAPSE_NAMESPACE, "node");
-    private static final QName ROLE_Q      = new QName(Constants.SYNAPSE_NAMESPACE, "role");
+    private static final QName NODE_Q        = new QName(Constants.SYNAPSE_NAMESPACE, "node");
+    private static final QName ROLE_Q        = new QName(Constants.SYNAPSE_NAMESPACE, "role");
     private static final QName DETAIL_Q      = new QName(Constants.SYNAPSE_NAMESPACE, "detail");
 
     private static final QName ATT_VALUE_Q = new QName(Constants.NULL_NAMESPACE, "value");
@@ -64,6 +65,34 @@
 
     private static final Log log = LogFactory.getLog(FaultMediatorFactory.class);
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"makefault\" type=\"makefault_type\"/>\n" +
+        "\t<xs:complexType name=\"makefault_type\">\n" +
+        "\t\t<xs:sequence>\n" +
+        "\t\t\t<xs:element name=\"code\">\n" +
+        "\t\t\t\t<xs:complexType>\n" +
+        "\t\t\t\t\t<xs:attribute name=\"value\" type=\"xs:string\"/>\n" +
+        "\t\t\t\t\t<xs:attribute name=\"expression\" type=\"xs:string\"/>\n" +
+        "\t\t\t\t</xs:complexType>\n" +
+        "\t\t\t</xs:element>\n" +
+        "\t\t\t<xs:element name=\"reason\">\n" +
+        "\t\t\t\t<xs:complexType>\n" +
+        "\t\t\t\t\t<xs:attribute name=\"value\" type=\"xs:string\"/>\n" +
+        "\t\t\t\t\t<xs:attribute name=\"expression\" type=\"xs:string\"/>\n" +
+        "\t\t\t\t</xs:complexType>\n" +
+        "\t\t\t</xs:element>\n" +
+        "\t\t\t<xs:element name=\"node\" minOccurs=\"0\"/>\n" +
+        "\t\t\t<xs:element name=\"role\" minOccurs=\"0\"/>\n" +
+        "\t\t\t<xs:element name=\"detail\" type=\"xs:anyType\" minOccurs=\"0\"/>\n" +
+        "\t\t</xs:sequence>\n" +
+        "\t\t<xs:attribute name=\"version\" type=\"xs:string\"/>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, FAULT_Q);
+
     public Mediator createMediator(OMElement elem) {
 
         FaultMediator faultMediator = new FaultMediator();
@@ -179,7 +208,10 @@
     }
 
     public QName getTagQName() {
-        return HEADER_Q;
+        return FAULT_Q;
     }
 
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
+    }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/FilterMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/FilterMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/FilterMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/FilterMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -25,6 +25,7 @@
 import org.apache.axiom.om.xpath.AXIOMXPath;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ws.commons.schema.XmlSchema;
 import org.jaxen.JaxenException;
 
 import javax.xml.namespace.QName;
@@ -47,6 +48,23 @@
 
     private static final QName FILTER_Q    = new QName(Constants.SYNAPSE_NAMESPACE, "filter");
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"filter\" type=\"filter_type\"/>\n" +
+        "\t<xs:complexType name=\"filter_type\">\n" +
+        "\t\t<xs:complexContent>\n" +
+        "\t\t\t<xs:extension base=\"synapse:mediator_type\">\n" +
+        "\t\t\t\t<xs:attribute name=\"source\"/>\n" +
+        "\t\t\t\t<xs:attribute name=\"regex\"/>\n" +
+        "\t\t\t\t<xs:attribute name=\"xpath\"/>\n" +
+        "\t\t\t</xs:extension>\n" +
+        "\t\t</xs:complexContent>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, FILTER_Q);
+
     public Mediator createMediator(OMElement elem) {
         FilterMediator filter = new FilterMediator();
         super.addChildren(elem, filter);
@@ -111,4 +129,7 @@
         return FILTER_Q;
     }
 
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
+    }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/HeaderMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/HeaderMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/HeaderMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/HeaderMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -27,6 +27,7 @@
 import org.apache.axiom.om.xpath.AXIOMXPath;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ws.commons.schema.XmlSchema;
 import org.jaxen.JaxenException;
 
 /**
@@ -48,6 +49,15 @@
 
     private static final QName HEADER_Q = new QName(Constants.SYNAPSE_NAMESPACE, "header");
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"header\" type=\"header_type\"/>\n" +
+        "\t<xs:complexType name=\"header_type\"/>\n" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, HEADER_Q);
+
     public Mediator createMediator(OMElement elem) {
 
         HeaderMediator headerMediator = new HeaderMediator();
@@ -103,4 +113,7 @@
         return HEADER_Q;
     }
 
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
+    }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/InMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/InMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/InMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/InMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -18,6 +18,7 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.synapse.api.Mediator;
 import org.apache.synapse.mediators.filters.InMediator;
+import org.apache.ws.commons.schema.XmlSchema;
 
 import javax.xml.namespace.QName;
 
@@ -34,6 +35,19 @@
 
     private static final QName IN_Q = new QName(Constants.SYNAPSE_NAMESPACE, "in");
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"in\" type=\"in_type\"/>\n" +
+        "\t<xs:complexType name=\"in_type\">\n" +
+        "\t\t<xs:complexContent>\n" +
+        "\t\t\t<xs:extension base=\"synapse:mediator_type\"/>\n" +
+        "\t\t</xs:complexContent>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, IN_Q);
+
     public Mediator createMediator(OMElement elem) {
         InMediator filter = new InMediator();
         super.addChildren(elem, filter);
@@ -44,4 +58,7 @@
         return IN_Q;
     }
 
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
+    }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/LogMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/LogMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/LogMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/LogMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -27,6 +27,7 @@
 import org.apache.axiom.om.xpath.AXIOMXPath;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ws.commons.schema.XmlSchema;
 import org.jaxen.JaxenException;
 
 import java.util.Iterator;
@@ -51,6 +52,21 @@
     private static final String FULL    = "full";
     private static final String CUSTOM  = "custom";
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"log\" type=\"log_type\"/>\n" +
+        "\t<xs:complexType name=\"log_type\">\n" +
+        "\t\t<xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n" +
+        "\t\t\t<xs:element name=\"property\" type=\"synapse:property_type\"/>\n" +
+        "\t\t</xs:sequence>\n" +
+        "\t\t<xs:attribute name=\"level\"/>\n" +
+        "\t\t<xs:attribute name=\"seperator\"/>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, LOG_Q);
+
     public QName getTagQName() {
         return LOG_Q;
     }
@@ -85,4 +101,7 @@
         return logMediator;
     }
 
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
+    }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -20,6 +20,7 @@
 
 import org.apache.synapse.api.Mediator;
 import org.apache.axiom.om.OMElement;
+import org.apache.ws.commons.schema.XmlSchema;
 
 /**
  * A mediator factory capable of creating an instance of a mediator through a given
@@ -38,4 +39,17 @@
      * @return QName of the mediator element
      */
     public QName getTagQName();
+
+    /**
+     * The name of the type in the schema returned by getTagSchema() which
+     * defines this element
+     * @return the QName for the type
+     */
+    public QName getTagSchemaType();
+
+    /**
+     * The schema for the mediator's XML configuration
+     * @return the schema of the mediator
+     */
+    public XmlSchema getTagSchema();
 }

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=419435&r1=419434&r2=419435&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 Wed Jul  5 21:51:15 2006
@@ -20,8 +20,12 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.io.StringReader;
 
 import javax.xml.namespace.QName;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -31,6 +35,7 @@
 import org.apache.synapse.config.xml.MediatorFactory;
 import org.apache.synapse.api.Mediator;
 import org.apache.axiom.om.OMElement;
+import org.apache.ws.commons.schema.*;
 
 import sun.misc.Service;
 
@@ -43,7 +48,6 @@
 
 public class MediatorFactoryFinder {
 
-    private static Map factoryMap = new HashMap();
 	private static final Log log = LogFactory.getLog(MediatorFactoryFinder.class);
 
 	private static final Class[] mediatorFactories = {
@@ -63,8 +67,45 @@
         OutMediatorFactory.class
       };
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:complexType name=\"mediator_type\">\n" +
+        "\t\t<xs:sequence maxOccurs=\"unbounded\">\n" +
+        "\t\t\t<xs:choice>\n" +
+        "\t\t\t</xs:choice>\n" +
+        "\t\t</xs:sequence>\n" +
+        "\t</xs:complexType>\n" +
+        "\t<xs:complexType name=\"property_type\">\n" +
+        "\t\t<xs:attribute name=\"name\" type=\"xs:string\" use=\"required\"/>\n" +
+        "\t\t<xs:attribute name=\"value\" type=\"xs:string\"/>\n" +
+        "\t\t<xs:attribute name=\"expression\" type=\"xs:string\"/>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
     private static MediatorFactoryFinder instance = null;
 
+    /**
+     * A map of mediator QNames to implementation class
+     */
+    private static Map factoryMap = new HashMap();
+
+    /**
+     * A holder to construct the Synapse.XSD for known mediators
+     */
+    private XmlSchema schema = null;
+
+    /**
+     * Used to define the "mediator_type" element for all known and
+     * dynamically registered mediators
+     */
+    private XmlSchema mediators = null;
+
+    /**
+     * Load schemas only if Xalan (a dependency for XmlSchema) is available
+     * i.e. if someone wants to access schema's this is a runtime requirement
+     */
+    private boolean loadSchemas = false;
+
     public static synchronized MediatorFactoryFinder getInstance() {
         if (instance == null) {
             instance = new MediatorFactoryFinder();
@@ -82,17 +123,69 @@
 
     private MediatorFactoryFinder() {
 
-		factoryMap = new HashMap();
-		for (int i = 0; i < mediatorFactories.length; i++) {
+        try {
+            TransformerFactory.newInstance();
+            loadSchemas = true;
+
+            schema = new XmlSchema(Constants.SYNAPSE_NAMESPACE, null);
+            try {
+                mediators = new XmlSchemaCollection().read(new StreamSource(
+                    new StringReader(STR_SCHEMA)), null);
+            } catch (XmlSchemaException e) {
+                handleException("Error defining mediator_types " +
+                    "elemement for the configuration language schema", e);
+            }
+
+        } catch(TransformerFactoryConfigurationError e) {
+            log.warn("Xalan unavailable. Mediator schemas will not be available");
+        }
+
+        factoryMap = new HashMap();
+
+        for (int i = 0; i < mediatorFactories.length; i++) {
 			Class c = mediatorFactories[i];
 			try {
-				factoryMap.put(((MediatorFactory) c.newInstance()).getTagQName(), c);
-			} catch (Exception e) {
+                MediatorFactory fac = (MediatorFactory) c.newInstance();
+                factoryMap.put(fac.getTagQName(), c);
+                if (loadSchemas) {
+                    mergeSchema(fac.getTagSchema());
+                    addMediatorType(mediators,  fac);
+                }
+            } catch (Exception e) {
 				throw new SynapseException("Error instantiating " + c.getName(), e);
 			}
 		}
         // now iterate through the available pluggable mediator factories
-        registerExtensions();
+        registerExtensions(mediators);
+
+        // add registers mediators as extensions
+        if (loadSchemas) {
+            mergeSchema(mediators);
+            if (log.isDebugEnabled()) {
+                System.out.println("Mediator Schema : ");
+                schema.write(System.out);
+            }
+        }
+    }
+
+    private void handleException(String msg, Exception e) {
+        log.error(msg, e);
+        throw new SynapseException(msg, e);
+    }
+
+    /**
+     * Merge given schema into our master schema
+     * @param child the sub schema / fragment to be merged
+     */
+    private void mergeSchema(XmlSchema child) {
+        if (child != null) {
+            XmlSchemaObjectTable schemaTypes = child.getSchemaTypes();
+            Iterator iter = schemaTypes.getNames();
+            while (iter.hasNext()) {
+                QName name = (QName) iter.next();
+                schema.getItems().add(schemaTypes.getItem(name));
+            }
+        }
     }
 
     /**
@@ -101,7 +194,7 @@
      * 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() {
+    private void registerExtensions(XmlSchema mediators) {
 
         log.debug("Registering mediator extensions found in the classpath : " + System.getProperty("java.class.path"));
 
@@ -111,11 +204,34 @@
             MediatorFactory mf = (MediatorFactory) it.next();
             QName tag = mf.getTagQName();
             factoryMap.put(tag, mf.getClass());
+            mergeSchema(mf.getTagSchema());
+            addMediatorType(mediators,  mf);
+
             log.debug("Added MediatorFactory " + mf.getClass() + " to handle " + tag);
         }
     }
 
-	/**
+    /**
+     * Include the mediator type element into the available "mediator_types"
+     * @param mediators the parent schema which holds the "mediator_types"
+     * @param mf the mediator factory which will provide the QName of the type
+     */
+    private void addMediatorType(XmlSchema mediators, MediatorFactory mf) {
+
+        XmlSchemaComplexType cmplx =
+            (XmlSchemaComplexType) mediators.getItems().getItem(0);
+        XmlSchemaSequence seq  = (XmlSchemaSequence) cmplx.getParticle();
+        XmlSchemaChoice choice = (XmlSchemaChoice) seq.getItems().getItem(0);
+
+        XmlSchemaElement ele = new XmlSchemaElement();
+        ele.setName(mf.getTagQName().getLocalPart());
+        if (mf.getTagSchemaType() != null && mf.getTagSchema() != null) {
+            ele.setSchemaTypeName(mf.getTagSchemaType());
+            choice.getItems().add(ele);
+        }
+    }
+
+    /**
 	 * This method returns a Processor given an OMElement. This will be used
 	 * recursively by the elements which contain processor elements themselves
 	 * (e.g. rules)
@@ -155,5 +271,16 @@
     */
     public Map getFactoryMap() {
         return factoryMap;
+    }
+
+    /**
+     * Returns the XML schema for the known mediators if available - or null
+     * @return the XmlSchema for the mediator configuration, if avialable. This
+     * will load only if the mediator factory has properly met the requirements
+     * for this feature, and if Xalan is available to the runtime (this is a
+     * requiement for the XmlSchema package used underneath)
+     */
+    public XmlSchema getSchema() {
+        return schema;
     }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/OutMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/OutMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/OutMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/OutMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -18,6 +18,7 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.synapse.api.Mediator;
 import org.apache.synapse.mediators.filters.OutMediator;
+import org.apache.ws.commons.schema.XmlSchema;
 
 import javax.xml.namespace.QName;
 
@@ -32,7 +33,20 @@
  */
 public class OutMediatorFactory extends AbstractListMediatorFactory {
 
-    private static final QName IN_Q = new QName(Constants.SYNAPSE_NAMESPACE, "out");
+    private static final QName OUT_Q = new QName(Constants.SYNAPSE_NAMESPACE, "out");
+
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"out\" type=\"out_type\"/>\n" +
+        "\t<xs:complexType name=\"out_type\">\n" +
+        "\t\t<xs:complexContent>\n" +
+        "\t\t\t<xs:extension base=\"synapse:mediator_type\"/>\n" +
+        "\t\t</xs:complexContent>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, OUT_Q);
 
     public Mediator createMediator(OMElement elem) {
         OutMediator filter = new OutMediator();
@@ -41,7 +55,10 @@
     }
 
     public QName getTagQName() {
-        return IN_Q;
+        return OUT_Q;
     }
 
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
+    }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/PropertyMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/PropertyMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/PropertyMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/PropertyMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -24,6 +24,7 @@
 import org.apache.axiom.om.xpath.AXIOMXPath;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ws.commons.schema.XmlSchema;
 import org.jaxen.JaxenException;
 
 import javax.xml.namespace.QName;
@@ -41,6 +42,19 @@
 
     private static final QName PROP_Q    = new QName(Constants.SYNAPSE_NAMESPACE, "set-property");
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"set-property\" type=\"set-property_type\"/>\n" +
+        "\t<xs:complexType name=\"set-property_type\">\n" +
+        "\t\t<xs:attribute name=\"name\"/>\n" +
+        "\t\t<xs:attribute name=\"value\"/>\n" +
+        "\t\t<xs:attribute name=\"expression\"/>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, PROP_Q);
+
     public Mediator createMediator(OMElement elem) {
 
         PropertyMediator propMediator = new PropertyMediator();
@@ -79,5 +93,9 @@
 
     public QName getTagQName() {
         return PROP_Q;
+    }
+
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
     }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SendMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SendMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SendMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SendMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -27,6 +27,7 @@
 import org.apache.axiom.om.OMAttribute;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ws.commons.schema.XmlSchema;
 
 import java.util.Iterator;
 import java.net.URL;
@@ -85,6 +86,15 @@
     private static final QName ATT_REF_Q = new QName(Constants.NULL_NAMESPACE, "ref");
     private static final QName ATT_ADDRESS_Q = new QName(Constants.NULL_NAMESPACE, "address");
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"send\" type=\"send_type\"/>\n" +
+        "\t<xs:complexType name=\"send_type\"/>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, SEND_Q);
+
     public Mediator createMediator(OMElement elem) {
 
         SendMediator sm =  new SendMediator();
@@ -124,4 +134,7 @@
         return SEND_Q;
     }
 
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
+    }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SequenceMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SequenceMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SequenceMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SequenceMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -22,6 +22,7 @@
 import org.apache.axiom.om.OMAttribute;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.logging.Log;
+import org.apache.ws.commons.schema.XmlSchema;
 
 import javax.xml.namespace.QName;
 
@@ -46,6 +47,19 @@
 
     private static final QName SEQUENCE_Q = new QName(Constants.SYNAPSE_NAMESPACE, "sequence");
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"sequence\" type=\"sequence_type\"/>\n" +
+        "\t<xs:complexType name=\"sequence_type\">\n" +
+        "\t\t<xs:complexContent>\n" +
+        "\t\t\t<xs:extension base=\"synapse:mediator_type\"/>\n" +
+        "\t\t</xs:complexContent>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, SEQUENCE_Q);
+
     public QName getTagQName() {
         return SEQUENCE_Q;
     }
@@ -74,4 +88,7 @@
         return seqMediator;
     }
 
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
+    }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SwitchMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SwitchMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SwitchMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SwitchMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -19,16 +19,19 @@
 import org.apache.synapse.mediators.filters.SwitchMediator;
 import org.apache.synapse.mediators.filters.SwitchCaseMediator;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.Util;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.xpath.AXIOMXPath;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
 import org.jaxen.JaxenException;
 
 import javax.xml.namespace.QName;
+import javax.xml.transform.stream.StreamSource;
 import java.util.Iterator;
+import java.io.StringReader;
 
 /**
  * Constructs a Switch mediator instance from the given XML configuration
@@ -52,6 +55,29 @@
     private static final QName CASE_Q    = new QName(Constants.SYNAPSE_NAMESPACE, "case");
     private static final QName DEFAULT_Q = new QName(Constants.SYNAPSE_NAMESPACE, "default");
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"switch\" type=\"synapse:switch_type\"/>\n" +
+        "\t<xs:complexType name=\"switch_type\">\n" +
+        "\t\t<xs:sequence>\n" +
+        "\t\t\t<xs:sequence maxOccurs=\"unbounded\">\n" +
+        "\t\t\t\t<xs:element name=\"case\" type=\"synapse:switch_case_type\"/>\n" +
+        "\t\t\t</xs:sequence>\n" +
+        "\t\t\t<xs:element name=\"default\" type=\"synapse:mediator_type\" minOccurs=\"0\"/>\n" +
+        "\t\t</xs:sequence>\n" +
+        "\t\t<xs:attribute name=\"source\"/>\n" +
+        "\t</xs:complexType>" +
+        "\t<xs:complexType name=\"switch_case_type\">\n" +
+        "\t\t<xs:complexContent>\n" +
+        "\t\t\t<xs:extension base=\"synapse:mediator_type\">\n" +
+        "\t\t\t\t<xs:attribute name=\"regex\" type=\"xs:string\"/>\n" +
+        "\t\t\t</xs:extension>\n" +
+        "\t\t</xs:complexContent>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA = Util.getSchema(STR_SCHEMA, SWITCH_Q);
+
     public Mediator createMediator(OMElement elem) {
 
         SwitchMediator switchMediator = new SwitchMediator();
@@ -64,7 +90,7 @@
         } else {
             try {
                 AXIOMXPath sourceXPath = new AXIOMXPath(source.getAttributeValue());
-                Util.addNameSpaces(sourceXPath, elem, log);
+                org.apache.synapse.Util.addNameSpaces(sourceXPath, elem, log);
                 switchMediator.setSource(sourceXPath);
 
             } catch (JaxenException e) {
@@ -92,5 +118,9 @@
 
     public QName getTagQName() {
         return SWITCH_Q;
+    }
+
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
     }
 }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -22,6 +22,7 @@
 import org.apache.synapse.api.Mediator;
 import org.apache.synapse.mediators.base.SynapseMediator;
 import org.apache.axiom.om.OMElement;
+import org.apache.ws.commons.schema.XmlSchema;
 
 /**
  * Builds the main mediator (@see SynapseConfiguration) of the Synapse instance
@@ -34,10 +35,27 @@
  */
 public class SynapseMediatorFactory extends AbstractListMediatorFactory {
 
-    private final static QName tagname = new QName(Constants.SYNAPSE_NAMESPACE, "rules");
+    private final static QName RULES_Q = new QName(Constants.SYNAPSE_NAMESPACE, "rules");
+
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"rules\" type=\"rules_type\"/>\n" +
+        "\t<xs:complexType name=\"rules_type\">\n" +
+        "\t\t<xs:complexContent>\n" +
+        "\t\t\t<xs:extension base=\"synapse:mediator_type\"/>\n" +
+        "\t\t</xs:complexContent>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, RULES_Q);
 
     public QName getTagQName() {
-        return tagname;
+        return RULES_Q;
+    }
+
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
     }
 
     public Mediator createMediator(OMElement elem) {

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/Util.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/Util.java?rev=419435&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/Util.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/Util.java Wed Jul  5 21:51:15 2006
@@ -0,0 +1,42 @@
+/*
+* 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.ws.commons.schema.XmlSchemaCollection;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.xml.sax.InputSource;
+
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.namespace.QName;
+import java.io.StringReader;
+
+public class Util {
+
+    private static final Log log = LogFactory.getLog(Util.class);
+
+    public static XmlSchema getSchema(String str, QName qName) {
+        try {
+            return new XmlSchemaCollection().read(
+                new InputSource(new StringReader(str)), null);
+        } catch (XmlSchemaException e) {
+            log.warn("Couldnt load schema for mediator with QName " + qName, e);
+            return null;
+        }
+    }
+}

Modified: incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ExtensionFactory
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ExtensionFactory?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ExtensionFactory (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ExtensionFactory Wed Jul  5 21:51:15 2006
@@ -1 +1 @@
-org.apache.synapse.config.xml.SpringConfigExtensionFactory
\ No newline at end of file
+org.apache.synapse.mediators.spring.SpringConfigExtensionFactory
\ No newline at end of file

Modified: incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.MediatorFactory
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.MediatorFactory?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.MediatorFactory (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.MediatorFactory Wed Jul  5 21:51:15 2006
@@ -1,5 +1,5 @@
-org.apache.synapse.config.xml.SpringMediatorFactory
-org.apache.synapse.config.xml.ValidateMediatorFactory
-org.apache.synapse.config.xml.TransformMediatorFactory
-org.apache.synapse.config.xml.JsonMediatorFactory
+org.apache.synapse.mediators.validate.ValidateMediatorFactory
+org.apache.synapse.mediators.transform.TransformMediatorFactory
+org.apache.synapse.mediators.spring.SpringMediatorFactory
+org.apache.synapse.mediators.json.JsonMediatorFactory
 org.apache.synapse.mediators.javascript.JavaScriptMediatorFactory

Modified: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/javascript/JavaScriptMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/javascript/JavaScriptMediatorFactory.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/javascript/JavaScriptMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/javascript/JavaScriptMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -22,6 +22,8 @@
 import org.apache.synapse.Constants;
 import org.apache.synapse.api.Mediator;
 import org.apache.synapse.config.xml.MediatorFactory;
+import org.apache.synapse.config.xml.Util;
+import org.apache.ws.commons.schema.XmlSchema;
 
 /**
  * Creates an instance of a JavaScript mediator. <p/>
@@ -34,7 +36,19 @@
 
     // private static final Log log = LogFactory.getLog(JavaScriptMediatorFactory.class);
 
-    private static final QName TAG_NAME = new QName(Constants.SYNAPSE_NAMESPACE, "javascript");
+    private static final QName TAG_NAME = new QName(Constants.SYNAPSE_NAMESPACE + "/js", "javascript");
+
+    private static final String STR_SCHEMA =
+        org.apache.synapse.config.xml.Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"javascript\" type=\"synapse:javascript_type\"/>\n" +
+        "\t<xs:complexType name=\"javascript_type\">\n" +
+        "\t\t<xs:complexContent>\n" +
+        "\t\t\t<xs:extension base=\"xs:anyType\"/>\n" +
+        "\t\t</xs:complexContent>\n" +
+        "\t</xs:complexType>" +
+        org.apache.synapse.config.xml.Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA = Util.getSchema(STR_SCHEMA, TAG_NAME);
 
     /**
      * Create a JavaScript mediator
@@ -56,6 +70,15 @@
 
     public QName getTagQName() {
         return TAG_NAME;
+    }
+
+    public QName getTagSchemaType() {
+        return new QName(Constants.SYNAPSE_NAMESPACE,
+            getTagQName().getLocalPart() + "_type", "js");
+    }
+
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
     }
 
 }

Copied: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JsonMediator.java (from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/json/JsonMediator.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JsonMediator.java?p2=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JsonMediator.java&p1=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/json/JsonMediator.java&r1=418981&r2=419435&rev=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/json/JsonMediator.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JsonMediator.java Wed Jul  5 21:51:15 2006
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.apache.synapse.mediators.ext.json;
+package org.apache.synapse.mediators.json;
 
 import org.apache.synapse.api.Mediator;
 import org.apache.synapse.MessageContext;

Copied: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JsonMediatorFactory.java (from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/JsonMediatorFactory.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JsonMediatorFactory.java?p2=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JsonMediatorFactory.java&p1=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/JsonMediatorFactory.java&r1=418981&r2=419435&rev=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/JsonMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/json/JsonMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -14,15 +14,19 @@
  * limitations under the License.
  */
 
-package org.apache.synapse.config.xml;
+package org.apache.synapse.mediators.json;
 
 import org.apache.synapse.api.Mediator;
-import org.apache.synapse.mediators.ext.json.JsonMediator;
+import org.apache.synapse.mediators.json.JsonMediator;
 import org.apache.synapse.SynapseException;
+import org.apache.synapse.config.xml.Constants;
+import org.apache.synapse.config.xml.MediatorFactory;
+import org.apache.synapse.config.xml.Util;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMAttribute;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ws.commons.schema.XmlSchema;
 
 import javax.xml.namespace.QName;
 
@@ -34,11 +38,21 @@
  * JTX is Json to XML
  * XTJ is XML to Json
  */
-public class JsonMediatorFactory implements MediatorFactory{
+public class JsonMediatorFactory implements MediatorFactory {
 
     private static final Log log = LogFactory.getLog(JsonMediatorFactory.class);
 
-    private static final QName tagName = new QName(Constants.SYNAPSE_NAMESPACE+"/json", "json");
+    private static final QName TAG_NAME = new QName(Constants.SYNAPSE_NAMESPACE+"/json", "json");
+
+    private static final String STR_SCHEMA =
+        org.apache.synapse.config.xml.Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"json\" type=\"synapse:json_type\"/>\n" +
+        "\t<xs:complexType name=\"json_type\">\n" +
+        "\t\t<xs:attribute name=\"direction\" type=\"xs:string\"/>" +
+        "\t</xs:complexType>" +
+        org.apache.synapse.config.xml.Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA = Util.getSchema(STR_SCHEMA, TAG_NAME);
 
     public Mediator createMediator(OMElement elem) {
         JsonMediator jsonMediator = new JsonMediator();
@@ -52,8 +66,18 @@
     }
 
     public QName getTagQName() {
-        return tagName;
+        return TAG_NAME;
+    }
+
+    public QName getTagSchemaType() {
+        return new QName(Constants.SYNAPSE_NAMESPACE,
+            getTagQName().getLocalPart() + "_type", "json");
     }
+
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
+    }
+
     private void handleException(String msg) {
         log.error(msg);
         throw new SynapseException(msg);

Copied: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringConfigExtension.java (from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfigExtension.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringConfigExtension.java?p2=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringConfigExtension.java&p1=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfigExtension.java&r1=418981&r2=419435&rev=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfigExtension.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringConfigExtension.java Wed Jul  5 21:51:15 2006
@@ -13,11 +13,12 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-package org.apache.synapse.config;
+package org.apache.synapse.mediators.spring;
 
 import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
 import org.springframework.context.support.GenericApplicationContext;
 import org.springframework.core.io.FileSystemResource;
+import org.apache.synapse.config.Extension;
 
 /**
  * This defines an extension to Synapse to process a Spring Configuration.

Copied: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringConfigExtensionFactory.java (from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigExtensionFactory.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringConfigExtensionFactory.java?p2=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringConfigExtensionFactory.java&p1=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigExtensionFactory.java&r1=418981&r2=419435&rev=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigExtensionFactory.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringConfigExtensionFactory.java Wed Jul  5 21:51:15 2006
@@ -13,7 +13,7 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-package org.apache.synapse.config.xml;
+package org.apache.synapse.mediators.spring;
 
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
@@ -21,7 +21,9 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.config.Extension;
-import org.apache.synapse.config.SpringConfigExtension;
+import org.apache.synapse.mediators.spring.SpringConfigExtension;
+import org.apache.synapse.config.xml.Constants;
+import org.apache.synapse.config.xml.ExtensionFactory;
 
 import javax.xml.namespace.QName;
 

Copied: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringMediator.java (from r418981, 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/spring/SpringMediator.java?p2=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringMediator.java&p1=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java&r1=418981&r2=419435&rev=419435&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/spring/SpringMediator.java Wed Jul  5 21:51:15 2006
@@ -13,14 +13,14 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-package org.apache.synapse.mediators.ext.spring;
+package org.apache.synapse.mediators.spring;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.api.Mediator;
-import org.apache.synapse.config.SpringConfigExtension;
+import org.apache.synapse.mediators.spring.SpringConfigExtension;
 import org.springframework.context.ApplicationContext;
 
 /**

Copied: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringMediatorFactory.java (from r418981, 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/mediators/spring/SpringMediatorFactory.java?p2=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringMediatorFactory.java&p1=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java&r1=418981&r2=419435&rev=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/spring/SpringMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -1,4 +1,19 @@
-package org.apache.synapse.config.xml;
+/*
+* 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.spring;
 
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
@@ -6,8 +21,12 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.api.Mediator;
-import org.apache.synapse.config.SpringConfigExtension;
-import org.apache.synapse.mediators.ext.spring.SpringMediator;
+import org.apache.synapse.mediators.spring.SpringConfigExtension;
+import org.apache.synapse.config.xml.Constants;
+import org.apache.synapse.config.xml.MediatorFactory;
+import org.apache.synapse.config.xml.Util;
+import org.apache.synapse.mediators.spring.SpringMediator;
+import org.apache.ws.commons.schema.XmlSchema;
 
 import javax.xml.namespace.QName;
 
@@ -22,7 +41,19 @@
 
     private static final Log log = LogFactory.getLog(SpringMediatorFactory.class);
 
-    private static final QName tagName = new QName(Constants.SYNAPSE_NAMESPACE, "spring");
+    private static final QName TAG_NAME = new QName(Constants.SYNAPSE_NAMESPACE + "/spring", "spring");
+
+    private static final String STR_SCHEMA =
+        org.apache.synapse.config.xml.Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"spring\" type=\"synapse:spring_type\"/>\n" +
+        "\t<xs:complexType name=\"spring_type\">\n" +
+        "\t\t<xs:attribute name=\"bean\" type=\"xs:string\" use=\"required\"/>\n" +
+        "\t\t<xs:attribute name=\"config\" type=\"xs:string\"/>\n" +
+        "\t\t<xs:attribute name=\"src\" type=\"xs:string\"/>\n" +
+        "\t</xs:complexType>" +
+        org.apache.synapse.config.xml.Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA = Util.getSchema(STR_SCHEMA, TAG_NAME);
 
     /**
      * Create a Spring mediator instance referring to the bean and configuration given
@@ -65,7 +96,15 @@
     }
 
     public QName getTagQName() {
-        return tagName;
+        return TAG_NAME;
     }
 
+    public QName getTagSchemaType() {
+        return new QName(Constants.SYNAPSE_NAMESPACE,
+            getTagQName().getLocalPart() + "_type", "spring");
+    }
+
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
+    }
 }

Modified: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/transform/TransformMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/transform/TransformMediator.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/transform/TransformMediator.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/transform/TransformMediator.java Wed Jul  5 21:51:15 2006
@@ -1,5 +1,19 @@
+/*
+* 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.transform;
-
 
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.OMContainer;

Copied: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/transform/TransformMediatorFactory.java (from r418981, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/TransformMediatorFactory.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/transform/TransformMediatorFactory.java?p2=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/transform/TransformMediatorFactory.java&p1=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/TransformMediatorFactory.java&r1=418981&r2=419435&rev=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/TransformMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/transform/TransformMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -13,17 +13,21 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-package org.apache.synapse.config.xml;
+package org.apache.synapse.mediators.transform;
 
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.xpath.AXIOMXPath;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.Util;
+import org.apache.synapse.config.xml.Constants;
+import org.apache.synapse.config.xml.AbstractMediatorFactory;
+import org.apache.synapse.config.xml.MediatorPropertyFactory;
 import org.apache.synapse.mediators.transform.TransformMediator;
 import org.apache.synapse.api.Mediator;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ws.commons.schema.XmlSchema;
 import org.jaxen.JaxenException;
 
 import javax.xml.namespace.QName;
@@ -42,10 +46,25 @@
 public class TransformMediatorFactory extends AbstractMediatorFactory {
 
     private static final Log log = LogFactory.getLog(TransformMediatorFactory.class);
-    private static final QName LOG_Q    = new QName(Constants.SYNAPSE_NAMESPACE, "transform");
+    private static final QName TAG_NAME    = new QName(Constants.SYNAPSE_NAMESPACE, "transform");
+
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"transform\" type=\"transform_type\"/>\n" +
+        "\t<xs:complexType name=\"transform_type\">\n" +
+        "\t\t<xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n" +
+        "\t\t\t<xs:element name=\"property\" type=\"synapse:property_type\"/>\n" +
+        "\t\t</xs:sequence>\n" +
+        "\t\t<xs:attribute name=\"xslt\" type=\"xs:string\" use=\"required\"/>\n" +
+        "\t\t<xs:attribute name=\"source\" type=\"xs:string\"/>\n" +
+            "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, TAG_NAME);
 
     public QName getTagQName() {
-        return LOG_Q;
+        return TAG_NAME;
     }
 
     public Mediator createMediator(OMElement elem) {
@@ -93,9 +112,13 @@
             }
         }
 
-        transformMediator.addAllProperties(MediatorPropertyFactory.getMediatorProperties(elem));
+        transformMediator.addAllProperties(
+            MediatorPropertyFactory.getMediatorProperties(elem));
 
         return transformMediator;
     }
 
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
+    }
 }

Copied: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/validate/ValidateMediator.java (from r418995, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ValidateMediator.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/validate/ValidateMediator.java?p2=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/validate/ValidateMediator.java&p1=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ValidateMediator.java&r1=418995&r2=419435&rev=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ValidateMediator.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/validate/ValidateMediator.java Wed Jul  5 21:51:15 2006
@@ -13,7 +13,7 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-package org.apache.synapse.mediators;
+package org.apache.synapse.mediators.validate;
 
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMNamespace;
@@ -26,6 +26,7 @@
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.mediators.AbstractListMediator;
+import org.apache.synapse.mediators.MediatorProperty;
 import org.jaxen.JaxenException;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;

Copied: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/validate/ValidateMediatorFactory.java (from r418995, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/ValidateMediatorFactory.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/validate/ValidateMediatorFactory.java?p2=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/validate/ValidateMediatorFactory.java&p1=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/ValidateMediatorFactory.java&r1=418995&r2=419435&rev=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/ValidateMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/validate/ValidateMediatorFactory.java Wed Jul  5 21:51:15 2006
@@ -13,7 +13,7 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-package org.apache.synapse.config.xml;
+package org.apache.synapse.mediators.validate;
 
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
@@ -22,8 +22,12 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.Util;
+import org.apache.synapse.config.xml.AbstractListMediatorFactory;
+import org.apache.synapse.config.xml.Constants;
+import org.apache.synapse.config.xml.MediatorPropertyFactory;
 import org.apache.synapse.api.Mediator;
-import org.apache.synapse.mediators.ValidateMediator;
+import org.apache.synapse.mediators.validate.ValidateMediator;
+import org.apache.ws.commons.schema.XmlSchema;
 import org.jaxen.JaxenException;
 
 import java.util.Iterator;
@@ -41,13 +45,35 @@
  */
 public class ValidateMediatorFactory extends AbstractListMediatorFactory {
 
-    private static final Log log = LogFactory.getLog(TransformMediatorFactory.class);
+    private static final Log log = LogFactory.getLog(ValidateMediatorFactory.class);
 
     private static final QName VALIDATE_Q = new QName(Constants.SYNAPSE_NAMESPACE, "validate");
     private static final QName ON_FAIL_Q = new QName(Constants.SYNAPSE_NAMESPACE, "on-fail");
     private static final QName SCHEMA_Q = new QName(Constants.NULL_NAMESPACE, "schema");
     private static final QName SOURCE_Q = new QName(Constants.NULL_NAMESPACE, "source");
 
+    private static final String STR_SCHEMA =
+        Constants.SCHEMA_PROLOG +
+        "\t<xs:element name=\"validate\" type=\"validate_type\"/>\n" +
+        "\t<xs:complexType name=\"validate_type\">\n" +
+        "\t\t<xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n" +
+        "\t\t\t<xs:element name=\"property\" type=\"synapse:property_type\"/>\n" +
+        "\t\t</xs:sequence>\n" +
+        "\t\t<xs:element name=\"on-fail\" type=\"on-fail_type\"/>" +
+        "\t\t<xs:attribute name=\"url\" type=\"xs:string\" use=\"required\"/>\n" +
+        "\t\t<xs:attribute name=\"source\" type=\"xs:string\"/>\n" +
+        "\t</xs:complexType>" +
+        "\t<xs:complexType name=\"on-fail_type\">\n" +
+        "\t\t<xs:complexContent>\n" +
+        "\t\t\t<xs:extension base=\"synapse:mediator_type\"/>\n" +
+        "\t\t</xs:complexContent>\n" +
+        "\t</xs:complexType>" +
+        Constants.SCHEMA_EPILOG;
+
+    private static final XmlSchema SCHEMA =
+        org.apache.synapse.config.xml.Util.getSchema(STR_SCHEMA, VALIDATE_Q);
+
+
     public Mediator createMediator(OMElement elem) {
 
         ValidateMediator validateMediator = new ValidateMediator();
@@ -88,12 +114,17 @@
             throw new SynapseException(msg);
         }
 
-        validateMediator.addAllProperties(MediatorPropertyFactory.getMediatorProperties(elem));
+        validateMediator.addAllProperties(
+            MediatorPropertyFactory.getMediatorProperties(elem));
 
         return validateMediator;
     }
 
     public QName getTagQName() {
         return VALIDATE_Q;
+    }
+
+    public XmlSchema getTagSchema() {
+        return SCHEMA;
     }
 }

Modified: incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/ValidateMediatorTest.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/ValidateMediatorTest.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/ValidateMediatorTest.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/ValidateMediatorTest.java Wed Jul  5 21:51:15 2006
@@ -25,8 +25,8 @@
 import org.apache.synapse.TestMediateHandler;
 import org.apache.synapse.TestMediator;
 import org.apache.synapse.mediators.TestUtils;
-import org.apache.synapse.mediators.ValidateMediator;
-import org.apache.synapse.config.xml.ValidateMediatorFactory;
+import org.apache.synapse.mediators.validate.ValidateMediator;
+import org.apache.synapse.mediators.validate.ValidateMediatorFactory;
 
 public class ValidateMediatorTest extends TestCase {
 

Modified: incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/json/JsonMediatorTest.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/json/JsonMediatorTest.java?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/json/JsonMediatorTest.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/json/JsonMediatorTest.java Wed Jul  5 21:51:15 2006
@@ -1,7 +1,7 @@
 package org.apache.synapse.json;
 
 import junit.framework.TestCase;
-import org.apache.synapse.mediators.ext.json.JsonMediator;
+import org.apache.synapse.mediators.json.JsonMediator;
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.mediators.TestUtils;
 import org.apache.synapse.core.axis2.Axis2MessageContext;

Modified: incubator/synapse/trunk/java/repository/conf/sample/synapse_spring_unittest.xml
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/repository/conf/sample/synapse_spring_unittest.xml?rev=419435&r1=419434&r2=419435&view=diff
==============================================================================
--- incubator/synapse/trunk/java/repository/conf/sample/synapse_spring_unittest.xml (original)
+++ incubator/synapse/trunk/java/repository/conf/sample/synapse_spring_unittest.xml Wed Jul  5 21:51:15 2006
@@ -5,8 +5,8 @@
   </definitions>
 
   <rules>
-  	<spring bean="springtest" config="springconfig"/>
-  	<spring bean="springtest" src="./../../repository/conf/sample/springsample.xml"/>
+  	<spring:spring bean="springtest" config="springconfig"/>
+  	<spring:spring bean="springtest" src="./../../repository/conf/sample/springsample.xml"/>
   </rules>
 
 </synapse> 



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