<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<html>
<head>
  <meta content="text/html; charset=iso-8859-1" http-equiv="content-type"/>
  <title>Synapse Configuration Language</title>
  <style type="text/css">
    .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;
    }
    .data-table{
        font-family:Verdana,Arial,Helvetica,sans-serif;
        font-size:11px;
        border:0px;
        margin:0px;
        border:solid 1px #cdcdcd;
    }
    .data-table th{
        background-color:#eeeeee;
        border-bottom:solid 1px #8d8d8d;
        padding-top:5px;
        padding-left:3px;
        text-align:left;
    }
    .data-table td{
        padding-top:4px;
        padding-left:3px;
        border-bottom:solid 1px #e1e1e1;
    }</style>
</head>

<body>

<table border="0" style="width: 100%">
  <caption></caption>
  <tbody>
    <tr>
      <td><h1>Apache Synapse ESB - Configuration</h1>
      </td>
      <td><img alt="Synapse logo" src="../images/synapse-logo-web2.png"
        width="197" height="82"/></td>
    </tr>
  </tbody>
</table>

<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>

<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">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 simple 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> &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>

<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> &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>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></p>

<h3><a name="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>  &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>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">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><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.</a></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> &lt;sequence name="string" [onError="string"] [key="string"] [trace="enable"]&gt;
   mediator*
 &lt;/sequence&gt;</pre>
<pre>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>&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">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>&lt;endpoint [name="string"] [key="string"] [trace="enable"]&gt;
  <a href="#address-endpoint">address-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>&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">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>&lt;address uri="endpoint-address" [format="soap11|soap12|pox|get"] [optimize="mtom|swa"]&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;/address&gt;</pre>

<p>Following are some sample address URI definitions.</p>
<pre>e.g.
HTTP   http://localhost:9000/soap/SimpleStockQuoteService
JMS     jms:/SimpleStockQuoteService?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;
              java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;
              java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=topic
Mail    mailto:guest@host
File     vfs:file:///home/user/directory
           vfs:file:///home/user/file
           vfs:ftp://guest:guest@localhost/directory?vfs.passive=true</pre>

<h4><a name="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>&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">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. Only http sessions are currently
supported, and identifies sessions based on http cookies. 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>&lt;session type="http"/&gt;?
&lt;loadBalance [policy="roundRobin"] [failover="true|false"]&gt;
  &lt;endpoint .../&gt;+
&lt;/loadBalance&gt;</pre>

<h4><a name="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>&lt;failover&gt;
  &lt;endpoint .../&gt;+
&lt;/failover&gt;</pre>

<h2><a name="proxy">Proxy service</a></h2>

<p>A &lt;proxy&gt; element is used to define a Synapse Proxy service.</p>
<pre> &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;description&gt;...&lt;/description&gt; | &lt;definitions&gt;...&lt;/definitions&gt;
   &lt;/publishWSDL&gt;?
   &lt;enableSec/&gt;?
   &lt;enableRM/&gt;?
   &lt;policy key="string"&gt;...&lt;/policy&gt;?       // optional service 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 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></p>

<p>You can give the following as service parameters:</p>

<table border="0" cellpadding="0" cellspacing="0" style="width: 100%"
class="data-table">
  <caption></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>

<p>Transport specific parameters that may be set as service parameters:</p>

<table border="0" cellpadding="0" cellspacing="0" style="width: 100%"
class="data-table">
  <caption></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>
      <td>Optional</td>
      <td>transport.jms.Destination</td>
      <td>The JMS destination name (Defaults to the service name)</td>
    </tr>
    <tr>
      <td></td>
      <td>Optional</td>
      <td>transport.jms.DestinationType</td>
      <td>The JMS destination type. Accept values 'queue' or 'topic'</td>
    </tr>
    <tr>
      <td></td>
      <td>Optional</td>
      <td>transport.jms.ReplyDestination</td>
      <td>The destination where a reply will be posted</td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td></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>
      <td>Required</td>
      <td>transport.vfs.ContentType</td>
      <td>The content type for messages for this service</td>
    </tr>
    <tr>
      <td></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>
      <td>Optional</td>
      <td>transport.PollInterval</td>
      <td>The poll interval (in seconds)</td>
    </tr>
    <tr>
      <td></td>
      <td>Optional</td>
      <td>transport.vfs.ActionAfterProcess</td>
      <td>DELETE or MOVE</td>
    </tr>
    <tr>
      <td></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>
      <td>Optional</td>
      <td>transport.vfs.ActionAfterErrors</td>
      <td>DELETE or MOVE</td>
    </tr>
    <tr>
      <td></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>
      <td>Optional</td>
      <td>transport.vfs.ActionAfterFailure</td>
      <td>DELETE or MOVE</td>
    </tr>
    <tr>
      <td></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>
      <td></td>
      <td></td>
      <td></td>
    </tr>
    <tr>
      <td></td>
      <td>Optional</td>
      <td>transport.vfs.ReplyFileURI</td>
      <td>Reply file URI</td>
    </tr>
    <tr>
      <td></td>
      <td>Optional</td>
      <td>transport.vfs.ReplyFileName</td>
      <td>Reply file name (defaults to response.xml)</td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td></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
for more samples</a>)</p>
<pre>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">Tasks</a></h2>

<p>A &lt;task&gt; element is used to define a Synapse Startup Task.</p>
<pre> &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">Mediators</a></h2>

<p>A mediator token refers to any of the following tokens:</p>
<pre><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="#makefault">makefault</a> | <a href="#xslt">xslt</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="#RMSequence">RMSequence</a> | <a href="#throttle">throttle</a> | <a href="#xquery">xquery</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="#script">script</a> | <a href="#spring">spring</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">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> &lt;send/&gt;</pre>

<p>If the message is to be sent to one or more endpoints, then the following
is used:</p>
<pre> &lt;send&gt;
   (endpointref | endpoint)+
 &lt;/send&gt;</pre>

<p>where the endpointref token refers to the following:</p>
<pre> &lt;endpoint key="name"/&gt;</pre>

<p>and the endpoint token refers to an anonymous endpoint definition.</p>

<p></p>

<h4><a name="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> &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></p>

<h4><a name="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> &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></p>

<h4><a name="property">Property</a></h4>
<pre> &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>Sandesha2RMSpecVersion - can be '1.0' or '1.1'</li>
  <li>Sandesha2SequenceKey - can be an identifier specifying an Sandesha
    internal sequence key, and</li>
  <li>Sandesha2LastMessage - '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>

<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>

<h4><a name="sequence_ref">Sequence</a></h4>
<pre> &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></p>

<h4><a name="validate">Validate</a></h4>
<pre> &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></p>

<h3>Transformation Mediators</h3>

<h4><a name="makefault">Makefault</a></h4>
<pre> &lt;makefault [version="soap11|soap12"]&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 "faultTo" of the original message if such a header existed on the
original message. If a 'version' attribute is specified, the created fault
message will be created as a selected SOAP 1.1 or SOAP 1.2 fault.</p>

<p></p>

<h4><a name="xslt">XSLT</a></h4>
<pre> &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' elements defines any features which should
be set to the TransformerFactory by explicitly. 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>

<p></p>

<h4><a name="header">Header</a></h4>
<pre> &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></p>

<h3>Selection Mediators</h3>

<h4><a name="filter">Filter</a></h4>
<pre> &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></p>

<h4><a name="switch">Switch</a></h4>
<pre> &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"></a>

<h4><a name="out">In / Out</a></h4>
<pre>&lt;in&gt;<br/>  mediator+
&lt;/in&gt;<br/></pre>
<pre>&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></p>

<h3>Database Mediators </h3>

<h4><a name="dblookup">DB-lookup</a></h4>
<pre>&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>

<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">DB-report</a></h4>
<pre>&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>

<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></p>

<h3>Advanced Mediators</h3>

<h4><a name="RMSequence">RMSequence</a></h4>
<pre> &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>

<h4><a name="throttle">Throttle</a></h4>
<pre>&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>

<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="xquery">XQuery</a></h4>
<pre>&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>

<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>

<h4><a name="cache">Cache</a></h4>
<pre> &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>

<h4><a name="clone">Clone</a></h4>
<pre> &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">Iterate</a></h4>
<pre> &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">Aggregate</a></h4>
<pre> &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">Class</a></h4>
<pre> &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></p>

<h4><a name="pojoCommand">POJOCommand</a></h4>
<pre> &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></p>

<h3><a name="script">Scripting language mediators</a></h3>

<p></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> &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> &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> &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> &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></p>

<h4><a name="spring">Spring mediator</a></h4>
<pre> &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>
</body>
</html>
