You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by hi...@apache.org on 2011/12/28 10:23:11 UTC

svn commit: r1225148 [12/15] - in /synapse/branches/2.1/src/site: ./ xdoc/1_0/ xdoc/1_1/ xdoc/1_1_1/ xdoc/1_2/

Added: synapse/branches/2.1/src/site/xdoc/1_2/Synapse_Configuration_Language.xml
URL: http://svn.apache.org/viewvc/synapse/branches/2.1/src/site/xdoc/1_2/Synapse_Configuration_Language.xml?rev=1225148&view=auto
==============================================================================
--- synapse/branches/2.1/src/site/xdoc/1_2/Synapse_Configuration_Language.xml (added)
+++ synapse/branches/2.1/src/site/xdoc/1_2/Synapse_Configuration_Language.xml Wed Dec 28 09:23:09 2011
@@ -0,0 +1,2048 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<document>
+    <properties>
+        <title>Apache Synapse - Configuration Language</title>
+    </properties>
+    <head>
+        <style type="text/css" xml:space="preserve">
+    .command {
+        border: 1px dashed #3c78b5;
+        text-align: left;
+        background-color: #f0f0f0;
+        padding: 3px;
+        font-size: 11px;
+        font-family: Courier;
+        margin: 10px;
+        line-height: 13px;
+    }
+    .consoleOutput {
+        border: 1px dashed #3c78b5;
+        font-size: 11px;
+        font-family: Courier;
+        margin: 10px;
+        line-height: 13px;
+        background-color: #f0f0f0;
+        border-bottom: 1px dashed #3c78b5;
+        padding: 3px;
+        border-style: solid;
+    }
+    .info {
+        border-style: solid;
+        border-width: 1px;
+        border-color: #090;
+        background-color: #dfd;
+        text-align:left;
+        margin-top: 5px;
+        margin-bottom: 5px;
+    }
+    li {
+        font-family: Verdana, arial, sans-serif;
+        font-size: 11px;
+        line-height: 16px;
+        color: #000000;
+        font-weight: normal;
+    }
+    p {
+        font-family: Verdana, arial, sans-serif;
+        font-size: 11px;
+        line-height: 16px;
+        color: #000000;
+        font-weight: normal;
+    }
+    pre {
+        padding: 0px;
+        margin-top: 5px;
+        margin-left: 15px;
+        margin-bottom: 5px;
+        margin-right: 5px;
+        text-align: left;
+        background-color: #f0f0f0;
+        padding: 3px;
+        border: 1px dashed #3c78b5;
+        font-size: 11px;
+        font-family: Courier;
+        margin: 10px;
+        line-height: 13px;
+    }
+    h1 {
+        font-size: 24px;
+        line-height: normal;
+        font-weight: bold;
+        background-color: #f0f0f0;
+        color: #003366;
+        border-bottom: 1px solid #3c78b5;
+        padding: 2px;
+        margin: 36px 0px 4px 0px;
+    }
+    h2 {
+        font-size: 18px;
+        line-height: normal;
+        font-weight: bold;
+        background-color: #f0f0f0;
+        border-bottom: 1px solid #3c78b5;
+        padding: 2px;
+        margin: 27px 0px 4px 0px;
+    }
+    h3 {
+        font-size: 14px;
+        line-height: normal;
+        font-weight: bold;
+        background-color: #f0f0f0;
+        padding: 2px;
+        margin: 21px 0px 4px 0px;
+    }
+    h4 {
+        font-size: 12px;
+        line-height: normal;
+        font-weight: bold;
+        background-color: #f0f0f0;
+        padding: 2px;
+        margin: 18px 0px 4px 0px;
+    }</style>
+    </head>
+    <body>
+    <div style="margin-top:-40px; float:right; _margin-top:0px;">
+      <img alt="Synapse logo"
+           src="images/synapse-logo-web2.png" width="197"
+           height="82"/>
+    </div>
+    <div>
+      <h1>
+        Apache Synapse ESB - Configuration
+      </h1>
+    </div>
+    <h3>
+      Overview
+    </h3>
+    <p>
+      An Apache Synapse Enterprise Service Bus (ESB) engine is driven off a set
+      of simple text/xml configuration files. This allows the configuration to
+      be easily hand edited, backed up from the file system, or even included
+      into version control for easier management and control (e.g. moving a
+      configuration from development, through QA, staging and into production).
+      The configuration files that drives the Synapse ESB are as follows:
+    </p>
+    <ul>
+      <li>
+        The Synapse configuration file - synapse.xml
+      </li>
+      <li>
+        The underlying Axis2 engine configuration file - axis2.xml
+      </li>
+      <li>
+        Resources referenced from the Registry
+      </li>
+    </ul>
+    <p>
+      While the axis2.xml configures the underlying transport and Web services
+      support, the synapse.xml configures the mediation rules and configuration
+      for the ESB. While any changes performed on the axis2.xml requires a
+      restart (e.g. for enabling a transport such as JMS), the synapse.xml could
+      be made to reference different configuration elements off a set of
+      multiple files - that are served through the built-in Registry. When using
+      the Registry to hold pieces of the configuration, certain elements such as
+      endpoint definitions, sequences and local entries could be updated
+      dynamically while the Synapse ESB executes, the the Registry could trigger
+      a re-load as configured.
+    </p>
+    <h2>
+      The Synapse Configuration (synapse.xml)
+    </h2>
+    <p>
+      As the diagram below depicts, the Synapse configuration defines the Proxy
+      services, Endpoints, Sequences and Startup jobs managed by the Synapse
+      ESB. It also defines the interface to the Registry/Repository being used
+      by the engine. Typically the Synapse ESB is deployed between the actual
+      client and a backend service implementation to mediate the message flow in
+      between. Thus the Synapse ESB can accept a message on behalf of the actual
+      service, perform authentication, validation, transformation, logging,
+      routing based on the content etc. and then decide the destination target
+      endpoint for the message and direct it to an actual service
+      implementation. The Synapse ESB can also detect timeouts, transport
+      failures during communication or introduce load balancing, throttling or
+      caching where necessary. For fault scenarios such as authentication
+      failure, or schema validation failure, the Synapse ESB can be configured
+      to return a custom message or a fault to the requesting client without
+      forwarding the request to the actual service.
+    </p>
+    <p>
+      <img alt="Synapse message flow"
+      src="images/synapse-flow.png" width="400" height="300"/>
+    </p>
+    <p/>
+    <p>
+      The Synapse ESB can operate in two modes:
+    </p>
+    <h3>
+      <a href="#service_mediation">Service mediation</a> / <a
+      href="#proxy">Proxy services</a>
+    </h3>
+    <p>
+      In Service mediation, the Synapse ESB exposes a service endpoint on the
+      ESB, that accepts messages from clients. Typically these services acts as
+      proxies for existing (external) services, and the role of Synapse would be
+      to "mediate" these messages before they are proxied to the actual service.
+      In this mode, Synapse could expose a service already available in one
+      transport, over a different transport; or expose a service that uses one
+      schema or WSDL as a service that uses a different schema or WSDL etc. A
+      Proxy service could define the transports over which the service is
+      exposed, and point to the mediation sequences that should be used to
+      process request and response messages through the proxy service. A proxy
+      service maybe a SOAP or REST/POX service over http/s or SOAP, POX, Plain
+      Text or Binary / Legacy service for other transports such as JMS and VFS
+      file systems - e.g. CSV content being the payload
+    </p>
+    <h3>
+      <a name="_message_mediation" id="_message_mediation">Message mediation</a>
+    </h3>
+    <p>
+      In Message mediation, Synapse can act as a transparent proxy for clients -
+      if they are directed to point to the Synapse ESB as a http proxy. This
+      way, Synapse could be configured to filter all messages on a network for
+      logging, access control etc, and could "mediate" messages without the
+      explicit knowledge of the original client. If Synapse receives a message
+      that is not accepted by any proxy service, this message is handled through
+      message mediation as well. Message mediation always processes messages
+      according to the mediation sequence defined as "main".
+    </p>
+    <h2>
+      Concepts and configuration elements overview
+    </h2>
+    <h3>
+      <a href="#mediator">Mediators</a> and <a href="#sequence">Mediation
+      Sequences</a>
+    </h3>
+    <p>
+      The Synapse ESB defines a 'mediator' as a component that is performs some
+      mediation action on a message during the process flow. Thus a mediator
+      gets full access to a message at the point where it is defined to gain
+      control, and could inspect the message, modify it or take an external
+      action depending on some attributes or values of the current message. A
+      mediation sequence, commonly called a 'sequence' is a list of such
+      mediators. A sequence may be named for re-use, or defined in-line or
+      anonymously within a configuration. Sequences may be defined within the
+      synapse.xml configuration or within the Registry. Writing a custom
+      mediator in Java is easy and the supplementary documentation provides more
+      details on this. The 'Class' and 'POJO (command)" mediators allows one to
+      plugin a Java class easily into the Synapse engine with minimal effort. In
+      addition, the Script mediator allows one to provide an Apache BSF script
+      (e.g. Javascript, Ruby, Groovy etc) for mediation.
+    </p>
+    <p>
+      A Synapse configuration holds two special sequences named as "main" and
+      "fault". These may be defined within the synapse.xml, or externally via
+      the Registry. If either is not found, a suitable default is generated at
+      runtime by the ESB. The default "main" sequence will simply send a message
+      without mediation, while the default "fault" sequence would log the
+      message including the payload and any error/exception encountered and stop
+      further processing. The 'fault' sequence executes whenever Synapse itself
+      encounters an error while processing a message - or when a fault handler
+      has not been defined to handle exceptions. A sequence can assign another
+      named sequence as its "fault" handler sequence, and control branches to
+      the fault handler if an error is encountered during the execution of the
+      initial sequence.
+    </p>
+    <h3>
+      <a href="#endpoint">Endpoints</a>
+    </h3>
+    <p>
+      An Endpoint definition within Synapse defines an external service endpoint
+      and any attributes or semantics that should be followed when communicating
+      with that endpoint. An endpoint definition can be named for re-use, or
+      defined in-line or anonymously within a configuration. Typically an
+      endpoint would be based on a service Address or a WSDL. Additionally the
+      Synapse ESB supports Failover and Load-balance endpoints - which are
+      defined over a group of endpoints. Endpoints may be defined within the
+      synapse.xml configuration or within the Registry.
+    </p>
+    <h3>
+      <a href="#task">Tasks</a>
+    </h3>
+    <p>
+      A Task is a custom Java class that implements the
+      org.apache.synapse.startup.Task interface that defines a single "public
+      void execute()" method. Such a task can be scheduled and managed via the
+      Synapse ESB. The scheduling information for a task can be specified in the
+      cron format or a simple format by the user. A task may also be specified
+      as a one-time task where required, and can be used to trigger a callout or
+      inject a message into the Synapse ESB.
+    </p>
+    <h3>
+      <a href="#registry">Remote Registry</a> and <a name="Local"
+      id="Local" href="#localEntry">Local Registry (Local Entries)</a>
+    </h3>
+    <p>
+      A Synapse configuration can refer to an external Registry / Repository for
+      resources used such as WSDL's, Schemas, Scripts, XSLT or XQuery
+      transformations etc. One or more remote registries may be hidden or merged
+      behind a local Registry interface defined to a Synapse configuration.
+      Resources from an external registry are looked up using "keys" - which are
+      known to the external registry. The Synapse ESB ships with a simple URL
+      based registry implementation that uses the file system for storage of
+      resources, and URL's or fragments as "keys".
+    </p>
+    <p>
+      A Registry may define a duration for which a resource served may be cached
+      by the Synapse runtime. If such a duration is specified, the Synapse ESB
+      is capable of refreshing the resource after cache expiry to support
+      dynamic re-loading of resource at runtime. Optionally, a configuration
+      could define certain "keys" to map to locally defined entities. These
+      entities may refer to a source URL or file, or defined as in-line XML or
+      text within the configuration itself. If a Registry contains a resource
+      whose "key" matches the key of a locally defined entry, the local entry
+      shadows the resource available in the Registry. Thus it is possible to
+      override Registry resources locally from within a configuration. To
+      integrate Synapse with a custom / new Registry or repository, one needs to
+      implement the org.apache.synapse.registry.Registry interface to suit the
+      actual Registry being used.
+    </p>
+    <h2>
+      The Axis2 Configuration (axis2.xml)
+    </h2>
+    <p>
+      The axis2.xml file configures the underlying Axis2 web services engine for
+      the Synapse ESB. The axis2.xml thus defines the transports enabled, and
+      other configuration parameters associated. A change to the axis2
+      configuration requires a hard re-start of the Synapse ESB. By default the
+      non-blocking http/s and the Apache VFS file system based transport are
+      enabled for listening of messages, while the non-blocking http/s, VFS and
+      JMS transports are enabled for sending messages out. Sample configurations
+      to enable/configure the other transports are provided within the default
+      axis2.xml file, and can be easily uncommented and modified. The sample JMS
+      configuration shipped is for a default ActiveMQ 4.1.x installation.
+    </p>
+    <h2>
+      The contents of the Synapse.xml configuration
+    </h2>
+    <p>
+      A Synapse configuration looks like the following at the top level:
+    </p>
+<pre xml:space="preserve"> &lt;definitions&gt;
+   &lt;<a href="#registry">registry</a> provider="string"&gt;...&lt;/registry&gt;?
+   &lt;<a href="#localEntry">localEntry</a> key="string"&gt;...&lt;/localEntry&gt;?
+   &lt;<a href="#sequence">sequence</a> name="string"&gt;...&lt;/sequence&gt;?
+   &lt;<a href="#endpoint">endpoint</a> name="string"&gt;...&lt;/endpoint&gt;?
+   &lt;<a href="#proxy">proxy</a> name="string" ...&gt;...&lt;/proxy&gt;?
+   &lt;<a href="#task">task</a> name="string" ...&gt;...&lt;/task&gt;?
+   <a href="#mediator">mediator</a>*
+ &lt;/definitions&gt;</pre>
+    <p/>
+    <p>
+      The &lt;definitions&gt; elements in a synapse.xml holds the Synapse ESB
+      configuration. While the &lt;registry&gt;, &lt;sequence&gt;, &lt;endpoint&gt;,
+      &lt;proxy&gt;, &lt;task&gt; and &lt;localEntry&gt; elements refer to those
+      discussed above, the built-in mediator elements names are already
+      registered with the Synapse engine. Custom mediators written by a user may
+      be included into the library directory, and would be dynamically picked up
+      in a Sun JDK environment. A list of mediators found directly as children
+      under the &lt;definitions&gt; element would be treated as the "main"
+      sequence, if a named sequence with the name "main" cannot be found.
+    </p>
+    <h2>
+      <a name="registry1" id="registry">Registry</a>
+    </h2>
+    <p>
+      The &lt;registry&gt; element is used to define the remote registry used by
+      the configuration. The registry provider specifies an implementation class
+      for the registry implementation used, and optionally a number of
+      configuration parameters as may be required for the configuration of the
+      connection to the registry.
+    </p>
+<pre xml:space="preserve"> &lt;registry provider="string"/&gt;
+   &lt;parameter name="string"&gt;text | xml&lt;/parameter&gt;*
+ &lt;/registry&gt;</pre>
+    <p>
+      Registry entries loaded from a remote registry may be cached as dictated
+      by the registry, and reloaded after the cache periods expires if a newer
+      version is found. Hence it is possible to define configuration elements
+      such as (dynamic) sequences and endpoints, as well as resources such as
+      XSLT's, Scripts or XSDs off the registry, and update the configuration as
+      these are allowed to dynamically change over time.
+    </p>
+    <p>
+      Synapse ships with a built-in URL based registry implementation called the
+      "SimpleURLRegistry" and this can be configured as follows:
+    </p>
+<pre xml:space="preserve">e.g.
+&lt;registry provider="org.apache.synapse.registry.url.SimpleURLRegistry"&gt;
+  &lt;parameter name="root"&gt;file:./repository/conf/sample/resources/&lt;/parameter&gt;
+  &lt;parameter name="cachableDuration"&gt;15000&lt;/parameter&gt;
+&lt;/registry&gt;</pre>
+    <p>
+      The "root" parameter specifies the root URL of the Registry for loaded
+      resources. The SimpleURLRegistry keys are path fragments, that when
+      combined with the root prefix would form the full URL for the referenced
+      resource. The "cachableDuration" parameter specifies the number of
+      milliseconds for which resources loaded from the Registry should be
+      cached. More advanced registry implementations allows different cachable
+      durations to be specified for different resources, or mark some resources
+      as never expires. (e.g. Check the WSO2 ESB implementation built over the
+      Apache Synapse ESB core)
+    </p>
+    <p/>
+    <h3>
+      <a name="localEntry" id="localEntry">Local Registry / Local Entry</a>
+    </h3>
+    <p>
+      The &lt;localEntry&gt; element is used to declare registry entries that
+      are local to the Synapse instance, as shown below
+    </p>
+<pre xml:space="preserve">  &lt;localEntry key="string" [src="url"]&gt;text | xml&lt;/localEntry&gt;</pre>
+    <p>
+      These entries are top level entries which are globally visible within the
+      entire system. Values of these entries can be retrieved via the extension
+      XPath function "synapse:get-property(prop-name)" and the keys of these
+      entries could be specified wherever a registry key is expected within the
+      configuration.
+    </p>
+    <p>
+      An entry can be static text specified as inline text or static XML
+      specified as an inline XML fragment or specified as a URL (using the src
+      attribute). A local entry shadows any entry with the same name from a
+      remote Registry.
+    </p>
+<pre xml:space="preserve">e.g.
+&lt;localEntry key="version"&gt;0.1&lt;/localEntry&gt;
+&lt;localEntry key="validate_schema"&gt;
+        &lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+         ...
+        &lt;/xs:schema&gt;
+    &lt;/localEntry&gt;
+&lt;localEntry key="xslt-key-req" src="file:repository/conf/sample/resources/transform/transform.xslt"/&gt;</pre>
+    <h2>
+      <a name="sequence" id="sequence">Sequences</a>
+    </h2>
+    <p>
+      A &lt;sequence&gt; element is used to define a sequence of mediators that
+      can be invoked later by name. The sequences named "main" and "fault" has
+      special significance in a Synapse configuration. The "main" sequence
+      handles any message that is accepted for '<a href="#message_mediation">Message
+      Mediation</a>', and the "fault" sequence is invoked if Synapse
+      encounters a fault, and a custom fault handler is not specified for the
+      sequence via its "onError" attribute. If the "main" or "fault" sequences
+      are not defined locally or not found in the Registry, the Synapse ESB
+      defines suitable defaults at initialization.
+    </p>
+    <p>
+      A Dynamic Sequence may be defined by specifying a key reference to a
+      registry entry. As the remote registry entry changes, the sequence will
+      dynamically be updated according to the specified cache duration and
+      expiration. If tracing is enabled on a sequence, all messages being
+      processed through the sequence would write tracing information through
+      each mediation step to the trace.log file configured via the
+      log4j.properties configuration. Setting the trace log level to TRACE would
+      additionally dump the message and detailed trace information at each
+      mediation step. A tracing enabled sequence propagates this setting to
+      invoked sub-sequences.
+    </p>
+<pre xml:space="preserve"> &lt;sequence name="string" [onError="string"] [key="string"] [trace="enable"]&gt;
+   mediator*
+ &lt;/sequence&gt;</pre>
+<pre xml:space="preserve">e.g.
+&lt;sequence name="main" onError="errorHandler"&gt;
+  .. &lt;!-- a 'main' sequence that invokes the sequence named 'errorHandler' on a fault --&gt; ..
+&lt;/sequence&gt;</pre>
+<pre xml:space="preserve">&lt;sequence key="sequence/dynamic_seq_1.xml"/&gt;
+where "sequence/dynamic_seq_1.xml" refers to the following sequence definition from the registry:
+
+&lt;sequence name="dynamic_sequence" xmlns="http://ws.apache.org/ns/synapse"&gt;
+  ..
+&lt;/sequence&gt;</pre>
+    <h2>
+      <a name="endpoint" id="endpoint">Endpoints</a>
+    </h2>
+    <p>
+      An &lt;endpoint&gt; element defines a destination for an outgoing message.
+      An endpoint may be specified as an address endpoint, WSDL based endpoint,
+      a load balancing endpoint or a fail-over endpoint as follows:
+    </p>
+<pre xml:space="preserve">&lt;endpoint [name="string"] [key="string"]&gt;
+  <a href="#address-endpoint">address-endpoint</a> | <a href="#default-endpoint">default-endpoint</a> | <a href="#wsdl-endpoint">wsdl-endpoint</a> | <a href="#load-balanced-endpoint">load-balanced-endpoint</a> | <a href="#fail-over-endpoint">fail-over-endpoint</a>
+&lt;/endpoint&gt; </pre>
+    <p>
+      All above endpoint types can have a name attribute, and such named
+      endpoints can be reffered by other endpoints, through the key attribute.
+      For example if there is an endpoint named as "foo", the following endpoint
+      can be used in any place, where "foo" has to be used.
+    </p>
+<pre xml:space="preserve">&lt;endpoint key="foo"/&gt;</pre>
+    <p>
+      The "trace" attribute turns on detailed trace information for messages
+      being sent to the endpoint. These are available in the trace.log
+      configured via the log4j.properties file. Setting the trace log level to
+      TRACE will dump detailed trace information including message payloads.
+    </p>
+    <h4>
+      <a name="address-endpoint" id="address-endpoint">Address Endpoint</a>
+    </h4>
+    <p>
+      Address endpoint is an endpoint defined by specifying the EPR and other
+      attributes of the endpoint directly in the configuration. The 'uri'
+      attribute of the address element contains the EPR of the target endpoint.
+      Message format for the endpoint and the method to optimize attachments can
+      be specified in the format and optimize attributes respectively. Reliable
+      messaging and security policies for the endpoint can be specified in the
+      policy attribute of the enableRM and enableSec elements respectively.
+      WS-Addressing can be engaged for the messaging going to the endpoint by
+      the enableAddressing element. suspendDurationOnFailure attribute specifies
+      the time duration in seconds to suspend this endpoint, if it is detected
+      as failed. If this attribute is not specified, endpoint will never be
+      recovered after a failure.
+    </p>
+    <p>
+      Address endpoints can timeout if responses fail to arrive at Synapse by a
+      predefined timeout-duration specified in seconds. The timeout action
+      specifies whether to discard responses that arrives late, or to trigger a
+      fault. Synapse has a periodic timeout handler that triggers itself at each
+      15 second interval. Thus endpoint timeouts will have a +/- error on actual
+      trigger time. Though this can be minimized by setting a System property
+      "synapse.timeout_handler_interval" to a millisecond duration below the
+      desired endpoint timeout, care must be taken as a lesser value may have a
+      higher overhead on the system.
+    </p>
+    <p>
+      An endpoint that fails may be suspended for a specified duration after
+      such a failure, during which new messages will not be processed through
+      the endpoint. The 'suspendDurationOnFailure' could specify an optional
+      value in seconds for which this endpoint should be suspended.
+    </p>
+    <p>
+      QoS aspects such as WS-RM and WS-Security and WS-Addressing may be enabled
+      on messages sent to an endpoint using the enableRM, enableSec and
+      enableAddressing elements. Optionally, the WS-RM and WS-Security policies
+      could be specified using the 'policy' attributes.
+    </p>
+<pre xml:space="preserve">&lt;address uri="<em>endpoint address</em>" [format="soap11|soap12|pox|get"] [optimize="mtom|swa"]
+         [encoding="<em>charset encoding</em>"]
+         [statistics="enable|disable"] [trace="enable|disable"]&gt;
+  &lt;enableRM [policy="<em>key</em>"]/&gt;?
+  &lt;enableSec [policy="<em>key</em>"]/&gt;?
+  &lt;enableAddressing [version="final|submission"] [separateListener="true|false"]/&gt;?
+  
+  &lt;timeout&gt;
+    &lt;duration&gt;<em>timeout duration in seconds</em>&lt;/duration&gt;
+    &lt;action&gt;discard|fault&lt;/action&gt;
+  &lt;/timeout&gt;?
+  
+  &lt;suspendDurationOnFailure&gt;
+    <em>suspend duration in seconds</em>
+  &lt;/suspendDurationOnFailure&gt;?
+&lt;/address&gt;</pre>
+    <p>
+      Following are some sample address URI definitions.
+    </p>
+    <table border="1" cellpadding="0" cellspacing="0" style="width: 100%; font-size:small" class="data-table">
+      <tbody>
+        <tr><th>Transport</th><th>Sample address</th></tr>
+        <tr><td>HTTP</td><td><tt>http://localhost:9000/soap/SimpleStockQuoteService</tt></td></tr>
+        <tr><td>JMS</td><td><tt>jms:/SimpleStockQuoteService?<br/>
+              &#160;&#160;&#160;transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;<br/>
+              &#160;&#160;&#160;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;<br/>
+              &#160;&#160;&#160;java.naming.provider.url=tcp://localhost:61616&amp;<br/>
+              &#160;&#160;&#160;transport.jms.DestinationType=topic</tt></td></tr>
+        <tr><td>Mail</td><td><tt>mailto:guest@host</tt></td></tr>
+        <tr><td>VFS</td><td><tt>vfs:file:///home/user/directory</tt></td></tr>
+        <tr><td/><td><tt>vfs:file:///home/user/file</tt></td></tr>
+        <tr><td/><td><tt>vfs:ftp://guest:guest@localhost/directory?vfs.passive=true</tt></td></tr>
+      </tbody>
+    </table>
+    <h4>
+      <a name="default-endpoint" id="default-endpoint">Default Endpoint</a>
+    </h4>
+    <p>
+      Default endpoint is an endpoint defined for adding QoS and other configurations
+      to the endpoint which is resolved from the 'To' address of the message context.
+      All the configurations such as message format for the endpoint, the method
+      to optimize attachments, reliable messaging, security policies for the endpoint
+      can be specified as in the Address Endpoint. This endpoint differs from the address
+      endpoint only in the uri attribute which will not be present in this endpoint.
+      Following section describes the configuration of a default endpoint
+    </p>
+    <pre xml:space="preserve">&lt;default [format="soap11|soap12|pox|get"] [optimize="mtom|swa"]
+         [encoding="<em>charset encoding</em>"]
+         [statistics="enable|disable"] [trace="enable|disable"]&gt;
+  &lt;enableRM [policy="<em>key</em>"]/&gt;?
+  &lt;enableSec [policy="<em>key</em>"]/&gt;?
+  &lt;enableAddressing [version="final|submission"] [separateListener="true|false"]/&gt;?
+
+  &lt;timeout&gt;
+    &lt;duration&gt;<em>timeout duration in seconds</em>&lt;/duration&gt;
+    &lt;action&gt;discard|fault&lt;/action&gt;
+  &lt;/timeout&gt;?
+
+  &lt;suspendDurationOnFailure&gt;
+    <em>suspend duration in seconds</em>
+  &lt;/suspendDurationOnFailure&gt;?
+&lt;/default&gt;</pre>
+    <h4>
+      <a name="wsdl-endpoint" id="wsdl-endpoint">WSDL Endpoint</a>
+    </h4>
+    <p>
+      WSDL endpoint is an endpoint definition based on a specified WSDL
+      document. The WSDL document can be specified either as a URI or as an
+      inlined definition within the configuration. The service and port name
+      containing the target EPR has to be specified with the 'service' and
+      'port' (or 'endpoint') attributes respectively. enableRM, enableSec,
+      enableAddressing, suspendDurationOnFailure and timeout elements are same
+      as for an Address endpoint.
+    </p>
+<pre xml:space="preserve">&lt;wsdl [uri="wsdl-uri"] service="qname" port/endpoint="qname"&gt;
+  &lt;wsdl:definition&gt;...&lt;/wsdl:definition&gt;?
+  &lt;wsdl20:description&gt;...&lt;/wsdl20:description&gt;?
+  &lt;enableRM [policy="key"]/&gt;?
+  &lt;enableSec [policy="key"]/&gt;?
+  &lt;enableAddressing/&gt;?
+  &lt;suspendDurationOnFailure&gt;suspend-duration&lt;/suspendDurationOnFailure&gt;?
+  &lt;timeout&gt;
+    &lt;duration&gt;timeout-duration&lt;/duration&gt;
+    &lt;action&gt;discard|fault&lt;/action&gt;
+  &lt;/timeout&gt;?
+&lt;/wsdl&gt;</pre>
+    <h4>
+      <a name="load-balanced-endpoint" id="load-balanced-endpoint">Load
+      balanced Endpoint</a>
+    </h4>
+    <p>
+      A Load balanced endpoint distributes the messages (load) arriving at it
+      among a set of listed endpoints by evaluating the load balancing policy
+      and any other relevant parameters. Policy attribute of the load balance
+      element specifies the load balance policy (algorithm) to be used for
+      selecting the target endpoint. Currently only the roundRobin policy is
+      supported. failover attribute determines if the next endpoint should be
+      selected once the currently selected endpoint has failed, and defaults to
+      true. The set of endpoints among which the load is distributed can be
+      listed under the 'loadBalance' element. Those endpoints can belong to any
+      endpoint type mentioned in this document. For example, failover endpoints
+      can be listed inside the load balance endpoint to load balance between
+      failover groups etc.
+    </p>
+    <p>
+      The optional 'session' element makes the endpoint a session affinity based
+      load balancing endpoint. If it is specified, sessions are bound to
+      endpoints in the first message and all successive messages for those
+      sessions are directed to their associated endpoints. Currently there are two types
+      of sessions supported in SAL endpoints. Namely HTTP transport based session
+      which identifies the sessions based on http cookies and the client session which
+      identifies the session by looking at a SOAP header sent by the client with the QName
+      '{http://ws.apache.org/ns/synapse}ClientID'. The 'failover' attribute mentioned above
+      is not applicable for session affinity based endpoints and it is always
+      considered as set to false. If it is required to have failover behavior in session
+      affinity based load balance endpoints, list failover endpoints as the target endpoints.
+    </p>
+<pre xml:space="preserve">&lt;session type="http|simpleClientSession"/&gt;?
+&lt;loadBalance [policy="roundRobin"] [failover="true|false"]&gt;
+  &lt;endpoint .../&gt;+
+&lt;/loadBalance&gt;</pre>
+    <h4>
+      <a name="fail-over-endpoint" id="fail-over-endpoint">Failover Endpoint</a>
+    </h4>
+    <p>
+      Failover endpoints send messages to the listed endpoints with the
+      following failover behavior. At the start, the first listed endpoint is
+      selected as the primary and all other endpoints are treated as backups.
+      Incoming messages are always sent only to the primary endpoint. If the
+      primary endpoint fails, next active endpoint is selected as the primary
+      and failed endpoint is marked as inactive. Thus it sends messages
+      successfully as long as there is at least one active endpoint among the
+      listed endpoints.
+    </p>
+<pre xml:space="preserve">&lt;failover&gt;
+  &lt;endpoint .../&gt;+
+&lt;/failover&gt;</pre>
+    <h2>
+      <a name="proxy" id="proxy">Proxy service</a>
+    </h2>
+    <p>
+      A &lt;proxy&gt; element is used to define a Synapse Proxy service.
+    </p>
+<pre xml:space="preserve"> &lt;proxy name="string" [transports="(http |https |jms |.. )+|all"] [pinnedServers="(serverName )+"]&gt;
+   &lt;description&gt;...&lt;/description&gt;?
+   &lt;target [inSequence="name"] [outSequence="name"] [faultSequence="name"] [endpoint="name"]&gt;
+      &lt;inSequence&gt;...&lt;/inSequence&gt;?
+      &lt;outSequence&gt;...&lt;/outSequence&gt;?
+      &lt;faultSequence&gt;...&lt;/faultSequence&gt;?
+      &lt;endpoint&gt;...&lt;/endpoint&gt;?
+   &lt;/target&gt;?
+   &lt;publishWSDL key="string" uri="string"&gt;
+      ( &lt;wsdl:definition&gt;...&lt;/wsdl:definition&gt; | &lt;wsdl20:description&gt;...&lt;/wsdl20:description&gt; )?
+      &lt;resource location="..." key="..."/&gt;*
+   &lt;/publishWSDL&gt;?
+   &lt;enableSec/&gt;?
+   &lt;enableRM/&gt;?
+   &lt;policy key="string" [type="(in | out)"]/&gt;?       // optional service or message level policies such as (e.g. WS-Security and/or WS-RM policies)
+   &lt;parameter name="string"&gt;                 // optional service parameters such as (e.g. transport.jms.ConnectionFactory)
+      string | xml
+   &lt;/parameter&gt;
+ &lt;/proxy&gt;</pre>
+    <p>
+      A proxy service is created and exposed on the specified transports through
+      the underlying Axis2 engine, exposing service EPR's as per the standard
+      Axis2 conventions - based on the service name. (Note: that currently Axis2
+      does not allow custom URI's to be set for services on some transports such
+      as http/s) The Proxy service could be exposed over all enabled Axis2
+      transports such as http, https, JMS, Mail and File etc. or on a subset of
+      these as specified with the optional 'transports' attribute.
+    </p>
+    <p>
+      You can give a list of Synapse server names where this proxy service
+      should be deployed using 'pinnedServers' attribute. It takes the server
+      names separated by comma or space character. If there is no pinned server
+      list then proxy service will be started in all server instances. If a
+      pinned server names list is given it will only start in the given named
+      Synapse server instances. The Synapse server name is picked up from the
+      system property 'SynapseServerName', failing which the hostname of the
+      machine would be used or default to 'localhost'. You can give a name to a
+      Synapse server instance as ./synapse.sh -DSynapseServerName=&lt;ServerName&gt;
+      or by editing the wrapper.conf where Synapse is started as a service.
+    </p>
+    <p>
+      Each service could define the target for received messages as a named
+      sequence or a direct endpoint. Target inSequence or endpoint is required
+      for the proxy configuration, and a target outSequence defines how
+      responses should be handled. Any supplied WS-Policies would apply as
+      service level policies, and any service parameters could be passed into
+      the proxy services' AxisService instance using the parameter elements
+      (e.g. the JMS destination etc). If the proxy service should enable
+      WS-Reliable Messaging or Security, the appropriate modules could be
+      engaged, and specified service level policies will apply.
+    </p>
+    <p>
+      A Dynamic Proxy may be defined by specifying the properties of the proxy
+      as dynamic entries by refering them with the key. (For example one could
+      specify the inSequence or endpoint with a remote key, without defining it
+      in the local configuration) As the remote registry entry changes, the
+      properties of the proxy will dynamically be updated accordingly. (Note:
+      proxy service definition itself can not be specified to be dynamic; i.e
+      &lt;proxy key="string"/&gt; is wrong)
+    </p>
+    <p>
+      A WSDL for the proxy service can be published using the &lt;publishWSDL&gt;
+      element. The WSDL document can be loaded from the registry by
+      specifying the 'key' attribute or from any other location by specifying the
+      'uri' attribute. Alternatively the WSDL can be provided inline as a child
+      element of &lt;publishWSDL&gt;. Artifacts (schemas or other WSDL documents)
+      imported by the WSDL can be resolved from the registry by specifying
+      appropriate &lt;resource&gt; elements:
+    </p>
+<pre> &lt;publishWSDL key="my.wsdl"&gt;
+   &lt;resource location="http://www.standards.org/standard.wsdl" key="standard.wsdl"/&gt;
+ &lt;/publishWSDL&gt;
+</pre>
+    <p>
+      In this example the WSDL is retrieved from the registry using the key 'my.wsdl'. It
+      imports another WSDL from location 'http://www.standards.org/standard.wsdl'. Instead
+      of loading it from this location, Synapse will retrieve the imported WSDL from the
+      registry entry 'standard.wsdl'.
+    </p>
+    <p>
+      You can give the following as service parameters:
+    </p>
+    <table border="1" cellpadding="0" cellspacing="0" style="width: 100%; font-size:small" class="data-table">
+      <caption/>
+      <tbody>
+        <tr>
+          <th>
+            Parameter
+          </th>
+          <th>
+            Value
+          </th>
+          <th>
+            Default
+          </th>
+          <th>
+            Description
+          </th>
+        </tr>
+        <tr>
+          <td>
+            useOriginalwsdl
+          </td>
+          <td>
+            true|false
+          </td>
+          <td>
+            false
+          </td>
+          <td>
+            Use the given WSDL instead of generating the WSDL.
+          </td>
+        </tr>
+        <tr>
+          <td>
+            modifyUserWSDLPortAddress
+          </td>
+          <td>
+            true|false
+          </td>
+          <td>
+            true
+          </td>
+          <td>
+            (Effective only with useOriginalwsdl=true) If true (default) modify
+            the port addresses to current host.
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p/>
+    <p>
+      Transport specific parameters that may be set as service parameters:
+    </p>
+    <table border="1" cellpadding="0" cellspacing="0" style="width: 100%; font-size:small" class="data-table">
+      <caption/>
+      <tbody>
+        <tr>
+          <th>
+            Transport
+          </th>
+          <th>
+            Require
+          </th>
+          <th>
+            Parameter
+          </th>
+          <th>
+            Description
+          </th>
+        </tr>
+        <tr>
+          <td>
+            JMS
+          </td>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.jms.ConnectionFactory
+          </td>
+          <td>
+            The JMS connection factory definition (from axis2.xml) to be used to
+            listen for messages for this service
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.jms.Destination
+          </td>
+          <td>
+            The JMS destination name (Defaults to a Queue with the service name)
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.jms.DestinationType
+          </td>
+          <td>
+            The JMS destination type. Accept values 'queue' or 'topic' (default:
+            queue)
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.jms.ReplyDestination
+          </td>
+          <td>
+            The destination where a reply will be posted
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.jms.Wrapper
+          </td>
+          <td>
+            The wrapper element for the JMS message
+          </td>
+        </tr>
+        <tr>
+          <td>
+            VFS
+          </td>
+          <td>
+            Required
+          </td>
+          <td>
+            transport.vfs.FileURI
+          </td>
+          <td>
+            The primary File (or Directory) URI in the vfs* transport format,
+            for this service
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Required
+          </td>
+          <td>
+            transport.vfs.ContentType
+          </td>
+          <td>
+            The expected content type for files retrieved for this service. The
+            VFS transport uses this information to select the appropriate
+            message builder.
+            <br/>
+            Examples:
+            <ul>
+              <li><tt>text/xml</tt> for plain XML or SOAP</li>
+              <li><tt>text/plain; charset=ISO-8859-1</tt> for text files</li>
+              <li><tt>application/octet-stream</tt> for binary data</li>
+            </ul>
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.vfs.FileNamePattern
+          </td>
+          <td>
+            A file name regex pattern to match files against a directory
+            specified by the FileURI
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.PollInterval
+          </td>
+          <td>
+            The poll interval (in seconds)
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.vfs.ActionAfterProcess
+          </td>
+          <td>
+            DELETE or MOVE
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.vfs.MoveAfterProcess
+          </td>
+          <td>
+            The directory to move files after processing (i.e. all files process
+            successfully)
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.vfs.ActionAfterErrors
+          </td>
+          <td>
+            DELETE or MOVE
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.vfs.MoveAfterErrors
+          </td>
+          <td>
+            The directory to move files after errors (i.e. some of the files
+            succeed but some fail)
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.vfs.ActionAfterFailure
+          </td>
+          <td>
+            DELETE or MOVE
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.vfs.MoveAfterFailure
+          </td>
+          <td>
+            The directory to move after failure (i.e. all files fail)
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.vfs.ReplyFileURI
+          </td>
+          <td>
+            Reply file URI
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.vfs.ReplyFileName
+          </td>
+          <td>
+            Reply file name (defaults to response.xml)
+          </td>
+        </tr>
+        <tr>
+          <td/>
+          <td>
+            Optional
+          </td>
+          <td>
+            transport.vfs.MoveTimestampFormat
+          </td>
+          <td>
+            Timestamp prefix format for processed file name. java.text.SimpleDateFormat compatible string. e.g. yyMMddHHmmss&apos;-&apos;
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+      VFS Transport URI examples (See <a
+      href="http://commons.apache.org/vfs/filesystems.html">http://commons.apache.org/vfs/filesystems.html</a>
+      for more samples)
+    </p>
+<pre xml:space="preserve">file:///directory/filename.ext
+file:////somehost/someshare/afile.txt
+jar:../lib/classes.jar!/META-INF/manifest.mf
+jar:zip:outer.zip!/nested.jar!/somedir
+ftp://myusername:mypassword@somehost/pub/downloads/somefile.tgz[?vfs.passive=true]</pre>
+
+    <h2>
+      <a name="task" id="task">Tasks</a>
+    </h2>
+    <p>
+      A &lt;task&gt; element is used to define a Synapse Startup Task.
+    </p>
+<pre xml:space="preserve"> &lt;task class="mypackage.MyTask" name="string" [pinnedServers="(serverName)+"]&gt;
+   &lt;property name="stringProp" value="String"/&gt;
+   &lt;property name="xmlProp"&gt;
+     &lt;somexml&gt;config&lt;/somexml&gt;
+   &lt;/property&gt;
+   &lt;trigger ([[count="10"]? interval="1000"] | [cron="0 * 1 * * ?"] | [once=(true | false)])/&gt;
+ &lt;/task&gt;</pre>
+    <p>
+      A task is created and scheduled to run at specified time intervals or as
+      specified by the cron expression. The Task class specifies the actual task
+      implementation class (which must implement org.apache.synapse.startup.Task
+      interface) to be executed at the specified interval/s, and name specifies
+      an identifier for the scheduled task.
+    </p>
+    <p>
+      Fields in the task class can be set using properties provided as string
+      literals or as XML fragments. (For example; if the task implementation
+      class has a field named "version" with a corresponding setter method, the
+      configuration value which will be assigned to this field before running
+      the task can be specified using a property with the name 'version')
+    </p>
+    <p>
+      There are three different trigger mechanisms to schedule tasks. A simple
+      trigger is specified specifying a 'count' and an 'interval', implying that
+      the task will run a 'count' number of times at specified intervals. A
+      trigger may also be specified as a cron trigger using a cron expression. A
+      one-time trigger is specified using the 'once' attribute as true in the
+      definition and could be specified as true in which case this task will be
+      executed only once just after the initialization of Synapse
+    </p>
+    <p>
+      You can give a list of Synapse server names where this task should be
+      started using pinnedServers attribute. Refer to the explanation of this
+      attribute under proxy services for more information.
+    </p>
+    <h2>
+      <a name="mediator" id="mediator">Mediators</a>
+    </h2>
+    <p>
+      A mediator token refers to any of the following tokens:
+    </p>
+<pre xml:space="preserve">
+    <a href="#send">send</a> | <a href="#drop">drop</a> | <a href="#log">log</a> | <a href="#property">property</a>  | <a href="#sequence_ref">sequence</a> | <a href="#validate">validate</a> | <a href="#Callout">Callout</a> | <a href="#makefault">makefault</a> | <a href="#xslt">xslt</a> | <a href="#xquery">xquery</a> | <a href="#header">header</a>  | <a href="#filter">filter</a> | <a href="#switch">switch</a> | <a href="#in">in</a> | <a href="#out">out</a>
+    | <a href="#dblookup">dblookup</a> | <a href="#dbreport">dbreport</a> | <a href="#throttle">throttle</a> | <a href="#cache">cache</a> | <a href="#clone">clone</a> | <a href="#iterate">iterate</a> | <a href="#aggregate">aggregate</a> | <a href="#class">class</a> | <a href="#pojoCommand">pojoCommand</a> | <a href="#spring">spring</a> | <a href="#script">script</a> | <a href="#RMSequence">RMSequence</a>
+    </pre>
+    <p>
+      In addition to the above, Synapse will be able to load custom mediators
+      via the J2SE Service Provider model. Mediator extensions must implement
+      the MediatorFactory interface. The Class and POJO Command mediators allow
+      custom Java code to be easily invoked during mediation, while the Script
+      mediator allows Apache BSF scripts such as Javascript, Ruby, Groovy etc to
+      be used for mediation.
+    </p>
+    <h3>
+      Core Mediators
+    </h3>
+    <h4>
+      <a name="send" id="send">Send</a>
+    </h4>
+    <p>
+      The send token represents a &lt;send&gt; element, used to send messages
+      out of Synapse to some endpoint. The send mediator also copies any message
+      context properties from the current message context to the reply message
+      received on the execution of the send operation so that the response could
+      be correlated back to the request. Messages may be correlated by WS-A
+      MessageID, or even simple custom text labels (see the property mediator
+      and samples)
+    </p>
+    <p>
+      In the simplest case shown below, the destination to send a message is
+      implicit in the message via the 'To' address. Thus a request message will
+      be sent to its 'To' address, and a response message would be sent back to
+      the client. Removing the 'To' address of a message targets it back to the
+      client, and thus a request message received may be returned to the client
+      after changing its direction. (Note: to mark a message as a response set
+      the property RESPONSE to true)
+    </p>
+    <p>
+      <strong>Note:</strong> A send operation may be blocking or
+      non-blocking depending on the actual transport implementation used. As the
+      default NIO based http/s implementation does not block on a send, care
+      must be taken if the same message must be sent and then further processed
+      (e.g. transformed). In such a scenario, it maybe required to first clone
+      the message into two copies and then perform processing to avoid
+      conflicts.
+    </p>
+<pre xml:space="preserve"> &lt;send/&gt;</pre>
+    <p>
+      If the message is to be sent to one or more endpoints, then the following
+      is used:
+    </p>
+<pre xml:space="preserve"> &lt;send&gt;
+   (endpointref | endpoint)+
+ &lt;/send&gt;</pre>
+    <p>
+      where the endpointref token refers to the following:
+    </p>
+<pre xml:space="preserve"> &lt;endpoint key="name"/&gt;</pre>
+    <p>
+      and the endpoint token refers to an anonymous endpoint definition.
+    </p>
+    <p/>
+    <h4>
+      <a name="drop" id="drop">Drop</a>
+    </h4>
+    <p>
+      The drop token refers to a &lt;drop&gt; element which is used to stop
+      further processing of a message:
+    </p>
+<pre xml:space="preserve"> &lt;drop/&gt;</pre>
+    <p>
+      Once the &lt;drop&gt; mediator executes, further processing of the current
+      message stops. A the drop mediator does not necessarily close transports.
+    </p>
+    <p/>
+    <h4>
+      <a name="log" id="log">Log</a>
+    </h4>
+    <p>
+      The log token refers to a &lt;log&gt; element which may be used to log
+      messages being mediated:
+    </p>
+<pre xml:space="preserve"> &lt;log [level="string"] [separator="string"]&gt;
+   &lt;property name="string" (value="literal" | expression="xpath")/&gt;*
+ &lt;/log&gt;</pre>
+    <p>
+      The optional level attribute selects a pre-defined subset of properties to
+      be logged.
+    </p>
+    <p>
+      e.g.
+    </p>
+    <ul>
+      <li>
+        simple = To, From, WSAction, SOAPAction, ReplyTo, MessageID and any
+        properties
+      </li>
+      <li>
+        headers = All SOAP header blocks and any properties
+      </li>
+      <li>
+        full = all attributes included in log level 'simple' and the SOAP
+        envelope and any properties
+      </li>
+      <li>
+        custom = Only properties specified to the Log mediator
+      </li>
+    </ul>
+    <p>
+      A separator if defined will be used to separate the attributes being
+      logged. The default separator is the ',' comma.
+    </p>
+    <p/>
+    <h4>
+      <a name="property" id="property">Property</a>
+    </h4>
+<pre xml:space="preserve"> &lt;property name="string" [action=set|remove] (value="literal" | expression="xpath") [scope=transport|axis2|axis2-client]/&gt;</pre>
+    <p>
+      The property token refers to a &lt;property&gt; element which is a
+      mediator that has no direct impact on the message but rather on the
+      message context flowing through Synapse. The properties set on a message
+      can be later retrieved through the synapse:get-property(prop-name) XPath
+      extension function. If a scope is specified for a property, the property
+      could be set as a transport header property or an (underlying) Axis2
+      message context property, or as a Axis2 client option. If a scope is not
+      specified, it will default to the Synapse message context scope. Using the
+      property element with action specified as "remove" you can remove any
+      existing message context properties.
+    </p>
+    <p>
+      There are some well-defined properties that you can get/set on the Synapse
+      message context scope:
+    </p>
+    <ul>
+      <li>
+        RESPONSE - 'true' means the message is to be marked as a response
+        message
+      </li>
+      <li>
+        OUT_ONLY - 'true' means the message is to be marked as an out-only
+        message that does not expect a response
+      </li>
+      <li>
+        ERROR_CODE - this is set to any error message code encountered during a
+        fault
+      </li>
+      <li>
+        ERROR_MESSAGE - this is set to any error message text encountered during
+        a fault
+      </li>
+      <li>
+        ERROR_DETAIL - this is set to any error message detail text encountered
+        during a fault
+      </li>
+      <li>
+        ERROR_EXCEPTION - this is set to any Java Exception encountered during a
+        fault
+      </li>
+    </ul>
+    <p>
+      There are some Axis2 and module properties that are useful which are set
+      at scope="axis2"
+    </p>
+    <ul>
+      <li>
+        Mercury2SequenceKey - can be an identifier specifying a Mercury
+        internal sequence key, and
+      </li>
+      <li>
+        Mercury2LastMessage - 'true' will make this the last message and
+        terminate the sequence
+      </li>
+    </ul>
+    <p>
+      There are some Axis2 client side properties/options that are useful which
+      are set at scope="axis2-client"
+    </p>
+    <ul>
+      <li>
+        FORCE_HTTP_1.0 - forces outgoing http/s messages to use HTTP 1.0
+        (instead of the default 1.1)
+      </li>
+    </ul>
+    <h5>
+      The synapse:get-property() XPath extension function
+    </h5>
+    <p>
+      The get-property() function allows any XPath expression used in a
+      configuration to lookup information from the current message context. It
+      is possible to retrieve properties previously set with the property
+      mediator, and/or information from the Synapse or Axis2 message contexts or
+      transport header. The function accepts the scope as an optional parameter
+      as shown below:
+    </p>
+    <p>
+      synapse:get-property( [(axis2 | axis2-client | transport),] &lt;property_name&gt;
+      [,&lt;dateformat&gt;] )
+    </p>
+    <p/>
+    <p>
+      Some useful properties from the Synapse message context follows:
+    </p>
+    <ul>
+      <li>
+        SYSTEM_DATE - Returns the current date as a String. Optionally a date
+        format as per standard date format may be supplied. e.g.
+        synapse:get-property("SYSTEM_DATE", "yyyy.MM.dd G 'at' HH:mm:ss z") or
+        get-property('SYSTEM_DATE')
+      </li>
+      <li>
+        SYSTEM_TIME - Returns the current time in milliseconds. (i.e. the
+        difference, measured in milliseconds, between the current time and
+        midnight, January 1, 1970 UTC)
+      </li>
+      <li>
+        To, From, Action, FaultTo, ReplyTo, MessageID the message To and Action
+        and WS-Addressing properties
+      </li>
+      <li>
+        MESSAGE_FORMAT - returns the message format - i.e. returns pox, get,
+        soap11 or soap12
+      </li>
+      <li>
+        OperationName - returns the operation name for the message
+      </li>
+    </ul>
+    <p>
+      In addition to the above, one may use the get-property() function to
+      retrieve Axis2 message context properties or transport headers. e.g.
+      synapse:get-property('transport', 'USER_AGENT')
+    </p>
+    <h5>
+      SynapseXpath variables
+    </h5>
+    <p>
+      There are a set of predefined XPath variables when writing XPaths in
+      the Synapse Configuration. Those are as follows;
+    </p>
+    <ul>
+        <li>
+            body - The SOAP 1.1 or 1.2 body element
+        </li>
+        <p>
+            For example; expression="$body/getQuote" refers to the first
+            getQuote element in the SOAP body regardless of whether the message
+            is SOAP-11 or SOAP-12
+        </p>
+        <li>
+            header - The SOAP 1.1 or 1.2 header element
+        </li>
+        <p>
+            For example; expression="$header/wsa:To" refers to the addressing
+            To header regardless of whether this message is SOAP-11 or SOAP-12
+        </p>
+    </ul>
+    <p>
+      Further there are some variable prefixes defined in Synapse XPaths
+      which can be usefull in writing the configurations;
+    </p>
+    <ul>
+        <li>
+            ctx - Prefix for Synapse MessageContext properties
+        </li>
+        <p>
+            For example; expression="$ctx:RESPONSE" gives the value of the
+            Synapse message context property with name 'RESPONSE'
+        </p>
+        <li>
+            axis2 - Prefix for Axis2 MessageContext properties
+        </li>
+        <p>
+            For example; expression="$axis2:messageType" gives the value of the
+            axis2 message context property with name 'messageType'
+        </p>
+        <li>
+            trp - Prefix for the transport headers
+        </li>
+        <p>
+            For example; expression="$trp:Content-Type" gives the value of the
+            'Content-Type' transport header, which is going to be the
+            Content-Type of the current message
+        </p>
+    </ul>
+    <h4>
+      <a name="sequence_ref" id="sequence_ref">Sequence</a>
+    </h4>
+<pre xml:space="preserve"> &lt;sequence key="name"/&gt;</pre>
+    <p>
+      A sequence ref token refers to a &lt;sequence&gt; element which is used to
+      invoke a named sequence of mediators.
+    </p>
+    <p/>
+    <h4>
+      <a name="validate" id="validate">Validate</a>
+    </h4>
+<pre xml:space="preserve"> &lt;validate [source="xpath"]&gt;
+   &lt;property name="validation-feature-id" value="true|false"/&gt;*
+   &lt;schema key="string"/&gt;+
+   &lt;on-fail&gt;
+     mediator+
+   &lt;/on-fail&gt;
+ &lt;/validate&gt;</pre>
+    <p>
+      The &lt;validate&gt; mediator validates the result of the evaluation of
+      the source xpath expression, against the schema specified. If the source
+      attribute is not specified, the validation is performed against the first
+      child of the SOAP body of the current message. If the validation fails,
+      the on-fail sequence of mediators is executed. Properties could be used to
+      turn on/off some of the underlying features of the validator (See <a
+      href="http://xerces.apache.org/xerces2-j/features.html">http://xerces.apache.org/xerces2-j/features.html</a>)
+    </p>
+    <p/>
+    <h4>
+      <a name="Callout" id="Callout">Callout</a>
+    </h4>
+<pre xml:space="preserve"> &lt;callout serviceURL="string" [action="string"]&gt;
+   &lt;configuration [axis2xml="string"] [repository="string"]/&gt;?
+   &lt;source xpath="expression" | key="string"&gt;
+   &lt;target xpath="expression" | key="string"/&gt;
+ &lt;/callout&gt;
+</pre>
+    <p>
+      The &lt;callout&gt; mediator performs a blocking external service invocation during 
+      mediation. The serviceURL and the optional action specifies the parameters for this external
+      call. The source element specifies the payload for the request message using an XPath expression;
+      or a registry key that will be used. The target element specifies a node, at which the resulting
+      payload will be attached into the current message, or the name of a key/property using which
+      the response would be attached to the current message context as a property.
+    </p>
+    <p>As the callout mediator performs a blocking call, it cannot use the default non-blocking http/s
+      transports based on Java NIO, and thus defaults to using the samples/axis2Client/client_repo/conf/axis2.xml
+      as the Axis2 configuration, and samples/axis2Client/client_repo as the client repository unless
+      these are specified separately
+    </p>
+    <h3>
+      Transformation Mediators
+    </h3>
+    <h4>
+      <a name="makefault" id="makefault">Makefault</a>
+    </h4>
+<pre xml:space="preserve"> &lt;makefault [version="soap11|soap12|pox"]&gt;
+   &lt;code (value="literal" | expression="xpath")/&gt;
+   &lt;reason (value="literal" | expression="xpath")&gt;
+   &lt;node&gt;?
+   &lt;role&gt;?
+   &lt;detail&gt;?
+ &lt;/makefault&gt;</pre>
+    <p>
+      The &lt;makefault&gt; mediator transforms the current message into a fault
+      message, but does NOT send it. The &lt;send&gt; mediator needs to be
+      invoked to send a fault message created this way. The fault message "To"
+      header is set to the "Fault-To" of the original message if such a header
+      exists on the original message. If a 'version' attribute is specified,
+      the created fault message will be created as a selected SOAP 1.1, SOAP
+      1.2 or POX fault.
+    </p>
+    <p/>
+    <h4>
+      <a name="xslt" id="xslt">XSLT</a>
+    </h4>
+<pre xml:space="preserve"> &lt;xslt key="string" [source="xpath"]&gt;
+   &lt;property name="string" (value="literal" | expression="xpath")/&gt;*
+   &lt;feature name="string" value="true| false" /&gt;*
+ &lt;/xslt&gt;</pre>
+    <p>
+      The &lt;xslt&gt; mediator applies the specified XSLT transformation to the
+      selected element of the current message payload. If the source element is
+      not specified, it defaults to the first child of the soap body. Optionally
+      parameters (XSLT) could be passed into the transformations through the
+      'property' elements. The 'feature' element defines any features which
+      should be explicitly set to the TransformerFactory. The feature
+      'http://ws.apache.org/ns/synapse/transform/feature/dom' turns on DOM based
+      transformations instead of serializing elements into Byte streams and/or
+      temporary files. Though this would be better in performance than using
+      byte streams, sometimes it may not work for all transformations.
+    </p>
+    <h4>
+      <a name="xquery" id="xquery">XQuery</a>
+    </h4>
+<pre xml:space="preserve">&lt;xquery key="string" [target="xpath"]&gt;
+    &lt;variable name="string" type="string" [key="string"] [expression="xpath"] [value="string"]/&gt;?
+&lt;/xquery&gt; </pre>
+    <p/>
+    <p>
+      The XQuery mediator can be used to perform an XQuery transformation. The
+      'key' attribute specifies the XQuery transformation, and the optional
+      'target' attribute specifies the node of the message that should be
+      transformed. This defaults to the first child of the SOAP body of the
+      payload. The 'variable' elements define a variable that could be bound to
+      the dynamic context of the XQuery engine in order to access those
+      variables through the XQuery script .
+    </p>
+    <p>
+      It is possible to specify just a literal 'value', or an XPath expression
+      over the payload, or even specify a registry key or a registry key
+      combined with an XPath expression that selects the variable. The name of
+      the variable corresponds to the name of variable declaration in the XQuery
+      script. The 'type' of the variable must be a valid type defined by the
+      JSR-000225 (XQJ API).
+    </p>
+    <p>
+      The supported types are:
+    </p>
+    <ul>
+      <li>
+        XQItemType.XQBASETYPE_INT -&gt; INT
+      </li>
+      <li>
+        XQItemType.XQBASETYPE_INTEGER -&gt; INTEGER
+      </li>
+      <li>
+        XQItemType.XQBASETYPE_BOOLEAN -&gt; BOOLEAN
+      </li>
+      <li>
+        XQItemType.XQBASETYPE_BYTE - &gt; BYTE
+      </li>
+      <li>
+        XQItemType.XQBASETYPE_DOUBLE -&gt; DOUBLE
+      </li>
+      <li>
+        XQItemType.XQBASETYPE_SHORT -&gt; SHORT
+      </li>
+      <li>
+        XQItemType.XQBASETYPE_LONG -&gt; LONG
+      </li>
+      <li>
+        XQItemType.XQBASETYPE_FLOAT -&gt; FLOAT
+      </li>
+      <li>
+        XQItemType.XQBASETYPE_STRING -&gt; STRING
+      </li>
+      <li>
+        XQItemType.XQITEMKIND_DOCUMENT -&gt; DOCUMENT
+      </li>
+      <li>
+        XQItemType.XQITEMKIND_DOCUMENT_ELEMENT -&gt; DOCUMENT_ELEMENT
+      </li>
+      <li>
+        XQItemType.XQITEMKIND_ELEMENT -&gt; ELEMENT
+      </li>
+    </ul>
+    <p/>
+    <h4>
+      <a name="header" id="header">Header</a>
+    </h4>
+<pre xml:space="preserve"> &lt;header name="qname" (value="literal" | expression="xpath") [action="set"]/&gt;
+ &lt;header name="qname" action="remove"/&gt;</pre>
+    <p>
+      The &lt;header&gt; mediator sets or removes a specified header from the
+      current soap infoset. Currently the set header only supports simple valued
+      headers. In the future we may extend this to have XML structured headers
+      by embedding the XML content within the element itself. The optional
+      action attribute specifies whether the mediator should set or remove the
+      header. If omitted, it defaults to a set-header.
+    </p>
+    <p/>
+    <h3>
+      Selection Mediators
+    </h3>
+    <h4>
+      <a name="filter" id="filter">Filter</a>
+    </h4>
+<pre xml:space="preserve"> &lt;filter (source="xpath" regex="string") | xpath="xpath"&gt;
+   mediator+
+ &lt;/filter&gt;</pre>
+    <p>
+      The &lt;filter&gt; mediator either test the given xpath expression as a
+      boolean expression, or match the evaluation result of a source xpath
+      expression as a String against the given regular expression. If the test
+      succeeds, the filter mediator will execute the enclosed mediators in
+      sequence.
+    </p>
+    <p>One could also use this mediator to handle the failure case as well, in which case the
+       configuration would be as follows
+    </p>
+<pre xml:space="preserve"> &lt;filter (source="xpath" regex="string") | xpath="xpath"&gt;
+   &lt;then [sequence="string"]&gt;
+     mediator+
+   &lt;/then&gt;
+   &lt;else [sequence="string"]&gt;
+     mediator+
+   &lt;/else&gt;
+ &lt;/filter&gt;</pre>
+    <p>In this case the filter condition remains as earlier and the succeeded messages will be
+       mediated using the the set of mediators enclosed in the 'then' element in sequence, while
+       failed messages will be mediated using the set of mediators enclosed in the else element
+       in sequence
+    </p>
+    <p/>
+    <h4>
+      <a name="switch" id="switch">Switch</a>
+    </h4>
+<pre xml:space="preserve"> &lt;switch source="xpath"&gt;
+   &lt;case regex="string"&gt;
+     mediator+
+   &lt;/case&gt;+
+   &lt;default&gt;
+     mediator+
+   &lt;/default&gt;?
+ &lt;/switch&gt;</pre>
+    <p>
+      The &lt;switch&gt; mediator will evaluate the given source xpath
+      expression into its string value, and match it against the given regular
+      expressions. If the specified cases does not match and a default case
+      exists, it will be executed.
+    </p>
+    <a name="in" id="in"/>
+    <h4>
+      <a name="out" id="out">In / Out</a>
+    </h4>
+<pre xml:space="preserve">&lt;in&gt;<br/>  mediator+
+&lt;/in&gt;<br/></pre>
+<pre xml:space="preserve">&lt;out&gt;
+  mediator+
+&lt;/out&gt;</pre>
+    <p>
+      <br/>
+    </p>
+    <p>
+      The In and Out mediators will execute the child mediators over the current
+      message if the message matches the direction of the mediator. Hence all
+      incoming messages would pass through the "&lt;in&gt;" mediators and vice
+      versa.
+    </p>
+    <p/>
+    <h3>
+      Database Mediators
+    </h3>
+    <h4>
+      <a name="dblookup" id="dblookup">DB-lookup</a>
+    </h4>
+<pre xml:space="preserve">&lt;dblookup&gt;
+   &lt;connection&gt;
+     &lt;pool&gt;
+      (
+       &lt;driver/&gt;
+       &lt;url/&gt;
+       &lt;user/&gt;
+       &lt;password/&gt;
+     |
+       &lt;dsName/&gt;
+       &lt;icClass/&gt;
+       &lt;url/&gt;
+       &lt;user/&gt;
+       &lt;password/&gt;
+     )
+       &lt;property name="name" value="value"/&gt;*
+     &lt;/pool&gt;
+   &lt;/connection&gt;
+   &lt;statement&gt;
+     &lt;sql&gt;select something from table where something_else = ?&lt;/sql&gt;
+     &lt;parameter [value="" | expression=""] type="CHAR|VARCHAR|LONGVARCHAR|NUMERIC|DECIMAL|BIT|TINYINT|SMALLINT|INTEGER|BIGINT|REAL|FLOAT|DOUBLE|DATE|TIME|TIMESTAMP"/&gt;*
+     &lt;result name="string" column="int|string"/&gt;*
+   &lt;/statement&gt;+
+&lt;/dblookup&gt;</pre>
+    <p/>
+    <p>
+      The dblookup mediator is capable of executing an arbitrary SQL select
+      statement, and then set some resulting values as local message properties
+      on the message context. The DB connection used maybe looked up from an
+      external DataSource or specified in-line, in which case an Apache DBCP
+      connection pool is established and used. Apache DBCP connection pools
+      support the following properties:
+    </p>
+    <ul>
+      <li>
+        autocommit = true | false
+      </li>
+      <li>
+        isolation = Connection.TRANSACTION_NONE |
+        Connection.TRANSACTION_READ_COMMITTED |
+        Connection.TRANSACTION_READ_UNCOMMITTED |
+        Connection.TRANSACTION_REPEATABLE_READ |
+        Connection.TRANSACTION_SERIALIZABLE
+      </li>
+      <li>
+        initialsize = int
+      </li>
+      <li>
+        maxactive = int
+      </li>
+      <li>
+        maxidle = int
+      </li>
+      <li>
+        maxopenstatements = int
+      </li>
+      <li>
+        maxwait = long
+      </li>
+      <li>
+        minidle = int
+      </li>
+      <li>
+        poolstatements = true | false
+      </li>
+      <li>
+        testonborrow = true | false
+      </li>
+      <li>
+        testonreturn = true | false
+      </li>
+      <li>
+        testwhileidle = true | false
+      </li>
+      <li>
+        validationquery = String
+      </li>
+    </ul>
+    <p>
+      More than one statement may be specified, and the SQL statement may
+      specify parameters which could be specified as values or XPath
+      expressions. The types of parameters could be any valid SQL types. Only
+      the first row of a result set will be considered and any others are
+      ignored. The single &lt;result&gt; element contains the 'name' and the
+      column' attributes. The 'name' attribute defines the name under which the
+      result is stored in the Synapse message context, and the column attribute
+      specifies a column number or name .
+    </p>
+    <h4>
+      <a name="dbreport" id="dbreport">DB-report</a>
+    </h4>
+<pre xml:space="preserve">&lt;dbreport&gt;
+   &lt;connection&gt;
+     &lt;pool&gt;
+      (
+       &lt;driver/&gt;
+       &lt;url/&gt;
+       &lt;user/&gt;
+       &lt;password/&gt;
+     |
+       &lt;dsName/&gt;
+       &lt;icClass/&gt;
+       &lt;url/&gt;
+       &lt;user/&gt;
+       &lt;password/&gt;
+     )
+       &lt;property name="name" value="value"/&gt;*
+     &lt;/pool&gt;
+   &lt;/connection&gt;
+   &lt;statement&gt;
+     &lt;sql&gt;insert into something values(?, ?, ?, ?)&lt;/sql&gt;
+     &lt;parameter [value="" | expression=""] type="CHAR|VARCHAR|LONGVARCHAR|NUMERIC|DECIMAL|BIT|TINYINT|SMALLINT|INTEGER|BIGINT|REAL|FLOAT|DOUBLE|DATE|TIME|TIMESTAMP"/&gt;*
+    &lt;/statement&gt;+
+&lt;/dblreport&gt;</pre>
+    <p/>
+    <p>
+      The dbreport mediator is very similar to the dblookup mediator, but writes
+      information to a Database, using the specified insert SQL statement.
+    </p>
+    <p/>
+    <h3>
+      Advanced Mediators
+    </h3>
+    <h4>
+      <a name="throttle" id="throttle">Throttle</a>
+    </h4>
+<pre xml:space="preserve">&lt;throttle [onReject="string"] [onAccept="string"] id="string"&gt;
+    (&lt;policy key="string"/&gt; | &lt;policy&gt;..&lt;/policy&gt;)
+    &lt;onReject&gt;..&lt;/onReject&gt;?
+    &lt;onAccept&gt;..&lt;/onAccept&gt;?
+&lt;/throttle&gt;</pre>
+    <p/>
+    <p>
+      The Throttle mediator can be used for rate limiting as well as concurrency
+      based limiting. A WS-Policy dictates the throttling configuration and may
+      be specified inline or loaded from the registry. Please refer to the
+      samples document for sample throttling policies. The Throttle mediator
+      could be added in the request path for rate limiting and concurrent access
+      limitation. When using for concurrent access limitation, the same throttle
+      mediator 'id' must be triggered on the response flow so that completed
+      responses are deducted from the available limit. (i.e. two instances of
+      the throttle mediator with the same 'id' attribute in the request and
+      response flows). The 'onReject' and 'onAccept' sequence references or
+      inline sequences define how accepted and rejected messages are to be
+      handled.
+    </p>
+    <h4>
+      <a name="cache" id="cache">Cache</a>
+    </h4>
+<pre xml:space="preserve"> &lt;cache [id="string"] [hashGenerator="class"] [timeout="seconds"] [scope=(per-host | per-mediator)]
+     collector=(true | false) [maxMessageSize="in-bytes"]&gt;
+   &lt;onCacheHit [sequence="key"]&gt;
+     (mediator)+
+   &lt;/onCacheHit&gt;?
+   &lt;implementation type=(memory | disk) maxSize="int"/&gt;
+ &lt;/cache&gt;</pre>
+    <p>
+      The &lt;cache&gt; mediator will evaluate the hash value of an incoming
+      message as described in the optional hash generator implementation (which
+      should be a class implementing the org.wso2.caching.digest.DigestGenerator
+      interface). The default hash generator is
+      'org.wso2.caching.digest.DOMHashGenerator'. If the generated hash value
+      has been found in the cache then the cache mediator will execute the
+      onCacheHit sequence which can be specified inline or referenced. The cache
+      mediator must be specified with an 'id' and two instances with this same
+      'id' that correlates the response message into the cache for the request
+      message hash. The optional 'timeout' specifies the valid duration for
+      cached elements, and the scope defines if mediator instances share a
+      common cache per every host instance, or per every cache mediator pair
+      (i.e. 'id') instance. The 'collector' attribute 'true' specifies that the
+      mediator instance is a response collection instance, and 'false' specifies
+      that its a cache serving instance. The maximum size of a message to be
+      cached could be specified with the optional 'maxMessageSize' attributes in
+      bytes and defaults to unlimited. Finally the 'implementation' element may
+      define if the cache is disk or memory based, and the 'maxSize' attribute
+      defines the maximum number of elements to be cached.
+    </p>
+    <h3>
+      EIP Mediators
+    </h3>
+    <h4>
+      <a name="clone" id="clone">Clone</a>
+    </h4>
+<pre xml:space="preserve"> &lt;clone [continueParent=(true | false)]&gt;
+   &lt;target [to="uri"] [soapAction="qname"] [sequence="sequence_ref"] [endpoint="endpoint_ref"]&gt;
+     &lt;sequence&gt;
+       (mediator)+
+     &lt;/sequence&gt;?
+     &lt;endpoint&gt;
+       endpoint
+     &lt;/endpoint&gt;?
+   &lt;/target&gt;+
+ &lt;/clone&gt;</pre>
+    <p>
+      The clone mediator closely resembles the Message Splitter EIP and will
+      split the message into number of identical messages which will be
+      processed in parallel. The original message cloned can be continued or
+      dropped depending on the boolean value of the optional 'continueParent'
+      attribute. Optionally a custom 'To' address and/or a 'Action' may be
+      specified for cloned messages
+    </p>
+    <h4>
+      <a name="iterate" id="iterate">Iterate</a>
+    </h4>
+<pre xml:space="preserve"> &lt;iterate [continueParent=(true | false)] [preservePayload=(true | false)] (attachPath="xpath")? expression="xpath"&gt;
+   &lt;target [to="uri"] [soapAction="qname"] [sequence="sequence_ref"] [endpoint="endpoint_ref"]&gt;
+     &lt;sequence&gt;
+       (mediator)+
+     &lt;/sequence&gt;?
+     &lt;endpoint&gt;
+       endpoint
+     &lt;/endpoint&gt;?
+   &lt;/target&gt;+
+ &lt;/iterate&gt;</pre>
+    <p>
+      The iterate mediator implements another EIP and will split the message
+      into number of different messages derived from the parent message by
+      finding matching elements for the XPath expression specified. New messages
+      will be created for each and every matching element and processed in
+      parallel using either the specified sequence or endpoint. Parent message
+      can be continued or dropped in the same way as in the clone mediator. The
+      'preservePayload' attribute specifies if the original message should be
+      used as a template when creating the splitted messages, and defaults to
+      'false', in which case the splitted messages would contain the split
+      elements as the SOAP body.
+    </p>
+    <h4>
+      <a name="aggregate" id="aggregate">Aggregate</a>
+    </h4>
+<pre xml:space="preserve"> &lt;aggregate&gt;
+   &lt;correlateOn expression="xpath"/&gt;?
+   &lt;completeCondition [timeout="time-in-seconds"]&gt;
+     &lt;messageCount min="int-min" max="int-max"/&gt;?
+   &lt;/completeCondition&gt;?
+   &lt;onComplete expression="xpath" [sequence="sequence-ref"]&gt;
+     (mediator +)?
+   &lt;/onComplete&gt;
+ &lt;/aggregate&gt;</pre>
+    <p>
+      The aggregate mediator implements the Message Aggregator EIP and will
+      aggregate the messages or responses for splitted messages using either the
+      clone or iterate mediators. At the same time it can aggregate messages on
+      the presence of matching elements specified by the correlateOn XPATH
+      expression. Aggregate will collect the messages coming into it until the
+      messages collected on the aggregation satisfies the complete condition.
+      The completion condition can specify a minimum or maximum number of
+      messages to be collected, or a timeout value in seconds, after which the
+      aggregation terminates. On completion of the aggregation it will merge all
+      of the collected messages and invoke the onComplete sequence on it. The
+      merged message would be created using the XPath expression specified by
+      the attribute 'expression' on the 'onComplete' element.
+    </p>
+    <h3>
+      Extension mediators
+    </h3>
+    <h4>
+      <a name="class" id="class">Class</a>
+    </h4>
+<pre xml:space="preserve"> &lt;class name="class-name"&gt;
+   &lt;property name="string" value="literal"&gt;
+     (either literal or XML child)
+   &lt;/property&gt;
+ &lt;/class&gt; </pre>
+    <p>
+      The class mediator creates an instance of a custom specified class and
+      sets it as a mediator. The class must implement the
+      org.apache.synapse.api.Mediator interface. If any properties are
+      specified, the corresponding setter methods are invoked on the class,
+      once, during initialization.
+    </p>
+    <p/>
+    <h4>
+      <a name="pojoCommand" id="pojoCommand">POJOCommand</a>
+    </h4>
+<pre xml:space="preserve"> &lt;pojoCommand name="class-name"&gt;
+   (
+   &lt;property name="string" value="string"/&gt; |
+   &lt;property name="string" context-name="literal" [action=(ReadContext | UpdateContext | ReadAndUpdateContext)]&gt;
+     (either literal or XML child)
+   &lt;/property&gt; |
+   &lt;property name="string" expression="xpath" [action=(ReadMessage | UpdateMessage | ReadAndUpdateMessage)]/&gt;
+   )*
+ &lt;/pojoCommand&gt; </pre>
+    <p>
+      The pojoCommand mediator creates an instance of the specified command
+      class - which may implement the org.apache.synapse.Command interface or
+      should have a public void method "public void execute()". If any
+      properties are specified, the corresponding setter methods are invoked on
+      the class before each message is executed. It should be noted that a new
+      instance of the POJO Command class is created to process each message
+      processed. After execution of the POJO Command mediator, depending on the
+      'action' attribute of the property, the new value returned by a call to
+      the corresponding getter method is stored back to the message or to the
+      context. The 'action' attribute may specify whether this behaviour is
+      expected or not via the Read, Update and ReadAndUpdate properties.
+    </p>
+    <p/>
+    <h3>
+      <a name="script" id="script">Scripting language mediators</a>
+    </h3>
+    <p/>
+    <p>
+      Synapse supports Mediators implemented in a variety of scripting languages
+      such as JavaScript, Python or Ruby. There are two ways of defining script
+      mediators, either with the script program statements stored in a separate
+      file which is referenced via the local or remote registry entry, or with
+      the script program statements embedded in-line within the Synapse
+      configuration. A script mediator using a script off the registry (local or
+      remote) is defined as follows:
+    </p>
+<pre xml:space="preserve"> &lt;script key="string" language="string" [function="script-function-name"]/&gt;</pre>
+    <p>
+      The property key is the registry key to load the script. The language
+      attribute specifies the scripting language of the script code (e.g. "js"
+      for Javascript, "rb" for ruby, "groovy" for Groovy, "py" for Python..).
+      The function is an optional attribute defining the name of the script
+      function to invoke, if not specified it defaults to a function named
+      'mediate'. The function is passed a single parameter - which is the
+      Synapse MessageContext. The function may return a boolean, if it does not,
+      then true is assumed, and the script mediator returns this value. An
+      inline script mediator has the script source embedded in the configuration
+      as follows:
+    </p>
+<pre xml:space="preserve"> &lt;script language="string"&gt;...script source code...&lt;script/&gt;</pre>
+    <p>
+      The execution context environment of the script has access to the Synapse
+      MessageContext predefined in a script variable named 'mc' . An example of
+      an inline mediator using JavaScript/E4X which returns false if the SOAP
+      message body contains an element named 'symbol' which has a value of 'IBM'
+      would be:
+    </p>
+<pre xml:space="preserve"> &lt;script language="js"&gt;mc.getPayloadXML()..symbol != "IBM";&lt;script/&gt;</pre>
+    <p>
+      Synapse uses the Apache <a href="http://jakarta.apache.org/bsf/">Bean
+      Scripting Framework</a> for the scripting language support, any
+      script language supported by BSF may be used to implement a Synapse
+      Mediator.
+    </p>
+    <p>
+      Implementing a Mediator with a script language can have advantages over
+      using the built in Synapse Mediator types or implementing a custom Java
+      class Mediator. Script Mediators have all the flexibility of a class
+      Mediator with access to the Synapse MessageContext and SynapseEnvironment
+      APIs, and the ease of use and dynamic nature of scripting languages allows
+      rapid development and prototyping of custom mediators. An additional
+      benefit of some scripting languages is that they have very simple and
+      elegant XML manipulation capabilities, for example JavaScript E4X or Ruby
+      REXML, so this makes them well suited for use in the Synapse mediation
+      environment. For both types of script mediator definition the
+      MessageContext passed into the script has additional methods over the
+      standard Synapse MessageContext to enable working with the XML in a way
+      natural to the scripting language. For example when using JavaScript
+      getPayloadXML and setPayloadXML, E4X XML objects, and when using Ruby,
+      REXML documents.
+    </p>
+    <h3>
+      Extensibility of Synapse
+    </h3>
+    <p>
+      The Synapse configuration language could be easily extended, with
+      configuration extensions as well as mediation extensions. The Spring
+      mediator is such an example.
+    </p>
+    <h4>
+      Spring Configuration
+    </h4>
+    <p>
+      A Spring configuration could be created as a localEntry or remote registry
+      entry providing a URL or a key reference to a Registry. The configuration
+      is then created on first use or as necessary (as per registry lookup
+      semantics) by the mediators which reference this configuration.
+    </p>
+<pre xml:space="preserve"> &lt;localEntry key="string"/&gt;
+ &lt;localEntry key="string" src="url"/&gt;</pre>
+    <p>
+      The name attribute specifies a unique name for the configuration, and the
+      src, key or inlined XML references to the Spring configuration
+    </p>
+    <p/>
+    <h4>
+      <a name="spring" id="spring">Spring mediator</a>
+    </h4>
+<pre xml:space="preserve"> &lt;spring:spring bean="exampleBean1" key="string"/&gt;</pre>
+    <p>
+      The &lt;spring&gt; element creates an instance of a mediator, which is
+      managed by Spring. This Spring bean must implement the Mediator interface
+      for it to act as a Mediator. The key will reference the Spring
+      ApplicationContext/Configuration used for the bean
+    </p>
+
+    <h3>
+      Other Mediators
+    </h3>
+        <h4>
+      <a name="RMSequence" id="RMSequence">RMSequence</a>
+    </h4>
+<pre xml:space="preserve"> &lt;RMSequence (correlation="xpath" [last-message="xpath"]) | single="true" [version="1.0|1.1"]/&gt;</pre>
+    <p>
+      The &lt;RMSequence&gt; mediator can be used to create a sequence of
+      messages to communicate via WS-Reliable Messaging with an WS-RM enabled
+      endpoint (&lt;enableRM&gt;). The simple use case of this mediator is to
+      specify a single="true" property, because this means that only one message
+      is involved in the same sequence. However if multiple messages should be
+      sent in the same sequence, the correlation property should be used with a
+      XPath expression that selects an unique element value from the incoming
+      message. With the result of the XPath expression, Synapse can group
+      messages together that belong to the same sequence. To close the sequence
+      neatly, for the last message of the sequence also an XPath expression
+      should be specified. With the version attribute the WS-RM specification
+      version to be used can be specified, 1.0 or 1.1.
+    </p>
+    <p/>
+    <p/>
+  </body>
+</document>  
\ No newline at end of file