Added: 
synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports.xml
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports.xml?rev=1302321&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports.xml 
(added)
+++ 
synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports.xml 
Mon Mar 19 08:41:05 2012
@@ -0,0 +1,820 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!--
+  ~  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.
+  -->
+
+<document>
+    <properties>
+        <title>Apache Synapse - Transports Catalog</title>
+    </properties>
+       <body>
+               <section name="Transports Catalog" id="Introduction">
+                       <p>
+                The Synapse project has developed a set of transport 
implementations that provide
+                protocol support and/or features that go beyond what is 
provided out of the box by
+                Axis2:
+                       </p>
+                       <ul>
+                               <li>
+                    A non blocking HTTP transport that gives better 
performance in a highly
+                    asynchronous environment like Synapse.
+                               </li>
+                               <li>
+                    A VFS transport that can read messages from files and 
write outgoing messages to
+                    a file system. The file system can be local or remote, and 
several remote
+                    protocols are supported, such as FTP, SSH, WebDAV, etc.
+                               </li>
+                               <li>
+                                       A transport supporting the
+                                       <a class="externalLink" 
href="http://www.fixprotocol.org";>Financial Information eXchange</a>
+                                       protocol. FIX is a public-domain 
messaging standard developed specifically for
+                    the real-time electronic exchange of securities 
transactions. It has a large user
+                    base and is developed by the collaborative effort of 
banks, broker-dealers,
+                    exchanges, industry utilities and associations, 
institutional investors, and IT
+                    providers around the world.
+                               </li>
+                       </ul>
+                       <p>Note that while these transports are developed as 
part of the Synapse project,
+                they can be used with any Axis2 based application.
+                       </p>
+                       <p>
+                               The Synapse distribution also comes bundled 
with the following transports from
+                the <a class="externalLink" 
href="http://axis.apache.org/axis2/java/transports/index.html";>Axis2 
Transport</a>
+                               project:
+                       </p>
+                       <ul>
+                               <li>
+                                       A
+                                       <a class="externalLink" 
href="http://axis.apache.org/axis2/java/transports/jms.html";>JMS transport</a>
+                                       supporting any JMS 1.0 or 1.1 provider.
+                               </li>
+                               <li>
+                                       A
+                                       <a class="externalLink" 
href="http://axis.apache.org/axis2/java/transports/mail.html";>Mail transport</a>
+                                       able to send messages using SMTP and 
poll messages from a POP3 or IMAP account.
+                                       <p>
+                        Apache Synapse is also compatible with the following 
transport implementations
+                        from the Apache Axis2 Transports project:
+                                       </p>
+                               </li>
+                               <li>
+                                       <a class="externalLink" 
href="http://axis.apache.org/axis2/java/transports/tcp-transport.html";>TCP 
transport</a>
+                               </li>
+                               <li>
+                                       <a class="externalLink" 
href="http://axis.apache.org/axis2/java/transports/sms.html";>SMS transport</a>
+                               </li>
+                               <li>UDP transport</li>
+                               <li>
+                                       XMPP transport
+                                       <p>
+                                               These transports are not 
shipped with Apache Synapse by default and hence they
+                        should be
+                                               <a class="externalLink" 
href="http://axis.apache.org/axis2/java/transports/download.cgi";>downloaded 
separately</a>
+                                               from the Axis2 transport 
website and installed in the Synapse runtime.
+                                       </p>
+                               </li>
+                       </ul>
+               </section>
+               <section name="Content" id="Content">
+                       <ul>
+                               <li>
+                                       <a href="#Introduction">Introduction</a>
+                               </li>
+                               <li>
+                                       <a href="#Contents">Contents</a>
+                               </li>
+                               <li>
+                                       <a 
href="#Non-blocking_HTTP_transport">Non-blocking HTTP transport</a>
+                                       <ul>
+                                               <li>
+                                                       <a 
href="#Example_configurations">Example configurations</a>
+                                               </li>
+                                               <li>
+                                                       <a 
href="#Transport_listener_parameters">Transport listener parameters</a>
+                                               </li>
+                                               <li>
+                                                       <a 
href="#Transport_sender_parameters">Transport sender parameters</a>
+                                               </li>
+                                       </ul>
+                               </li>
+                               <li>
+                                       <a href="#VFS_transport">VFS 
transport</a>
+                                       <ul>
+                                               <li>
+                                                       <a 
href="#Transport_listener">Transport listener</a>
+                                               </li>
+                                               <li>
+                                                       <a 
href="#Transport_sender">Transport sender</a>
+                                               </li>
+                                               <li>
+                                                       <a 
href="#Using_SFTP">Using SFTP</a>
+                                               </li>
+                                               <li>
+                                                       <a 
href="#Known_issues">Known issues</a>
+                                               </li>
+                                       </ul>
+                               </li>
+                               <li>
+                                       <a href="#FIX_transport">FIX 
transport</a>
+                                       <ul>
+                                               <li>
+                                                       <a 
href="#Setting_up_the_FIX_Transport">Setting up the FIX Transport</a>
+                                               </li>
+                                               <li>
+                                                       <a 
href="#FIX_Transport_Parameters">FIX Transport Parameters</a>
+                                               </li>
+                                       </ul>
+                               </li>
+                       </ul>
+               </section>
+           <section name="Non-blocking HTTP transport" 
id="Non-blocking_HTTP_transport">
+                       <subsection name="Example configuration" 
id="Example_configurations">
+                               <div class="xmlConf">&lt;transportReceiver 
name=&quot;http&quot; 
class=&quot;org.apache.synapse.transport.nhttp.HttpCoreNIOListener&quot;&gt;
+    &lt;parameter name=&quot;port&quot;&gt;8280&lt;/parameter&gt;
+    &lt;parameter name=&quot;non-blocking&quot;&gt;true&lt;/parameter&gt;
+&lt;/transportReceiver&gt;
+
+&lt;transportReceiver name=&quot;https&quot; 
class=&quot;org.apache.synapse.transport.nhttp.HttpCoreNIOSSLListener&quot;&gt;
+    &lt;parameter name=&quot;port&quot; 
locked=&quot;false&quot;&gt;8243&lt;/parameter&gt;
+    &lt;parameter name=&quot;non-blocking&quot; 
locked=&quot;false&quot;&gt;true&lt;/parameter&gt;
+    &lt;parameter name=&quot;keystore&quot; locked=&quot;false&quot;&gt;
+        &lt;KeyStore&gt;
+            &lt;Location&gt;lib/identity.jks&lt;/Location&gt;
+            &lt;Type&gt;JKS&lt;/Type&gt;
+            &lt;Password&gt;password&lt;/Password&gt;
+            &lt;KeyPassword&gt;password&lt;/KeyPassword&gt;
+        &lt;/KeyStore&gt;
+    &lt;/parameter&gt;
+    &lt;parameter name=&quot;truststore&quot; locked=&quot;false&quot;&gt;
+        &lt;TrustStore&gt;
+            &lt;Location&gt;lib/trust.jks&lt;/Location&gt;
+            &lt;Type&gt;JKS&lt;/Type&gt;
+            &lt;Password&gt;password&lt;/Password&gt;
+        &lt;/TrustStore&gt;
+    &lt;/parameter&gt;
+&lt;/transportReceiver&gt;
+
+&lt;transportSender name=&quot;http&quot;  
class=&quot;org.apache.synapse.transport.nhttp.HttpCoreNIOSender&quot;&gt;
+    &lt;parameter name=&quot;non-blocking&quot; 
locked=&quot;false&quot;&gt;true&lt;/parameter&gt;
+    &lt;parameter name=&quot;warnOnHTTP500&quot; 
locked=&quot;false&quot;&gt;*&lt;/parameter&gt;
+&lt;/transportSender&gt;
+
+&lt;transportSender name=&quot;https&quot; 
class=&quot;org.apache.synapse.transport.nhttp.HttpCoreNIOSSLSender&quot;&gt;
+    &lt;parameter name=&quot;non-blocking&quot; 
locked=&quot;false&quot;&gt;true&lt;/parameter&gt;
+    &lt;parameter name=&quot;warnOnHTTP500&quot; 
locked=&quot;false&quot;&gt;*&lt;/parameter&gt;
+    &lt;parameter name=&quot;keystore&quot; locked=&quot;false&quot;&gt;
+        &lt;KeyStore&gt;
+            &lt;Location&gt;lib/identity.jks&lt;/Location&gt;
+            &lt;Type&gt;JKS&lt;/Type&gt;
+            &lt;Password&gt;password&lt;/Password&gt;
+            &lt;KeyPassword&gt;password&lt;/KeyPassword&gt;
+        &lt;/KeyStore&gt;
+    &lt;/parameter&gt;
+    &lt;parameter name=&quot;truststore&quot; locked=&quot;false&quot;&gt;
+        &lt;TrustStore&gt;
+            &lt;Location&gt;lib/trust.jks&lt;/Location&gt;
+            &lt;Type&gt;JKS&lt;/Type&gt;
+            &lt;Password&gt;password&lt;/Password&gt;
+        &lt;/TrustStore&gt;
+    &lt;/parameter&gt;
+&lt;/transportSender&gt;</div>
+                       </subsection>
+                       <subsection name="Transport listener parameters" 
id="Transport_listener_parameters">
+                               <p>The following parameters are supported by 
both the HTTP and the HTTPS listener:</p>
+                               <dl>
+                                       <dt>
+                                               <tt>port</tt>
+                                       </dt>
+                                       <dd>The TCP port to bind the listener 
to.</dd>
+                                       <dt>
+                                               <tt>bind-address</tt>
+                                       </dt>
+                                       <dd>
+                        The IP address to bind the listener to. This can be 
used on hosts that have
+                        more than one network interface or IP address to run 
multiple Synapse instances
+                        listening to the same port. If this parameter is not 
specified, the
+                                               listener will accept 
connections on any IP address.
+                                       </dd>
+                                       <dt>
+                                               <tt>hostname</tt>
+                                       </dt>
+                                       <dd>
+                                               The host name to use when 
computing endpoint references in generated WSDL files.
+                        The default value is the host name as provided by the 
operation system or
+                                               <tt>localhost</tt> if the host 
name can't be determined. The value of this
+                        parameter is ignored if <tt>WSDLEPRPrefix</tt> is 
specified.
+                                       </dd>
+                                       <dt>
+                                               <tt>WSDLEPRPrefix</tt>
+                                       </dt>
+                                       <dd>
+                                               The URL prefix to use when 
computing endpoint references in generated WSDL files.
+                        The value must be a valid URL with at least a protocol 
and host. If this value
+                        is unspecified, endpoint references will be computed 
based on the listener type
+                        (HTTP or HTTPS) and <tt>hostname</tt> and 
<tt>port</tt> parameters.
+                                               <p>
+                                                       This parameter should 
be used if clients connect to Synapse through a frontend
+                            server, e.g. a (load balancing) Apache, and these 
clients rely on the address
+                            information in the WSDL documents exposed through 
<tt>...?wsdl</tt> URLs.
+                                               </p>
+                                       </dd>
+                               </dl>
+                               <p>The following parameters are specific to the 
HTTPS listener: </p>
+                               <dl>
+                                       <dt>
+                                               <tt>keystore</tt>
+                                       </dt>
+                                       <dd>
+                                               The keystore configuration. The 
value of this parameter must be a
+                                               <tt>&lt;KeyStore&gt;</tt>
+                                               element as shown in the example 
configurations above.
+                                       </dd>
+                                       <dt>
+                                               <tt>truststore</tt>
+                                       </dt>
+                                       <dd>
+                                               The truststore configuration. 
The value of this parameter must be a
+                                               <tt>&lt;TrustStore&gt;</tt>
+                                               element as shown in the example 
configurations above.
+                                       </dd>
+                                       <dt>
+                                               <tt>SSLVerifyClient</tt>
+                                       </dt>
+                                       <dd>
+                                               This parameter has the same 
meaning as the corresponding
+                                               <a class="externalLink" 
href="http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslverifyclient";>mod_ssl
 directive</a>
+                                               and sets the desired 
certificate verification level for client authentication:
+                                               <ul>
+                                                       <li>
+                                                               <tt>none</tt> 
(default): no client certificate is required at all
+                                                       </li>
+                                                       <li>
+                                                               
<tt>optional</tt>: the client may present a valid certificate, but is
+                                not required to do so
+                                                       </li>
+                                                       <li>
+                                                               
<tt>require</tt>: the client has to present a valid certificate,
+                                otherwise the connection request will be 
terminated during SSL handshake
+                                                       </li>
+                                               </ul>
+                                       </dd>
+                               </dl>
+                       </subsection>
+                       <subsection name="Transport sender parameters" 
id="Transport_sender_parameters">
+                               <p>
+                    The following property can be used to control based on 
content-types whether the
+                    HTTP/HTTPS sender shall output a warning for responses 
with HTTP status code 500.
+                               </p>
+                               <dl>
+                                       <dt>
+                                               <tt>warnOnHTTP500</tt>
+                                       </dt>
+                                       <dd>
+                        A list of content-types for which Synapse shall output 
a warning when receiving
+                        an HTTP 500 response (each value each separated by a 
|). By default Synapse
+                        outputs a warning for any HTTP 500 response, 
irrespective of the content-type.
+                        Consequently, also for each SOAP fault a warning will 
be logged. If only for
+                        specific content-types a warning shall be logged, 
please provide a |-separated
+                        list. To output the warning for messages which do not 
have a content-type set,
+                        please use the value 'none'.
+                                               <p>
+                            Example value: x-application/hessian|none
+                        </p>
+                                       </dd>
+                               </dl>
+                               <p>
+                                       The following properties can be used to 
configure the HTTP sender to use a proxy.
+                    They can be specified either as transport parameters in 
declared in
+                                       <tt>&lt;transportSender&gt;</tt> or as 
system properties.
+                               </p>
+                               <dl>
+                                       <dt>
+                                               <tt>http.proxyHost</tt>
+                                       </dt>
+                                       <dd>The host name or address of the 
proxy server.</dd>
+                                       <dt>
+                                               <tt>http.proxyPort</tt>
+                                       </dt>
+                                       <dd>The TCP port of the proxy 
server.</dd>
+                                       <dt>
+                                               <tt>http.nonProxyHosts</tt>
+                                       </dt>
+                                       <dd>
+                                               The hosts to which the HTTP 
sender should connect directly and not through
+                        the proxy server. The value can be a list of hosts, 
each separated by a |, and
+                        in addition a wildcard character (*) can be used for 
matching.
+                                               <p>
+                                                       Example value:
+                                                       
<tt>*.foo.com|localhost</tt>
+                                               </p>
+                                       </dd>
+                               </dl>
+                               <p>Note that the HTTPS sender has no proxy 
support yet.</p>
+                               <p>The following parameters are specific to the 
HTTP sender:</p>
+                               <dl>
+                                       <dt>
+                                               <tt>keystore</tt>
+                                       </dt>
+                                       <dd>
+                                               The keystore configuration. The 
value of this parameter must be a
+                                               <tt>&lt;KeyStore&gt;</tt> 
element as shown in the example configurations
+                        above.
+                                       </dd>
+                                       <dt>
+                                               <tt>truststore</tt>
+                                       </dt>
+                                       <dd>
+                                               The truststore configuration. 
The value of this parameter must be a
+                                               <tt>&lt;TrustStore&gt;</tt>
+                                               element as shown in the example 
configurations above.
+                                       </dd>
+                                       <dt>
+                                               <tt>novalidatecert</tt>
+                                       </dt>
+                                       <dd>
+                                               When set to <tt>true</tt>, this 
parameter disables server certificate
+                        validation (trust). The default value is 
<tt>false</tt>. This parameter will
+                        be ignored if <tt>truststore</tt> is set.
+                                               <p>
+                                                       Setting his parameter 
to <tt>true</tt>
+                                                       is useful in 
development and test environments, but should not be used in
+                            production environments. If validation is 
disabled, a warning message will
+                            be logged at startup.
+                                               </p>
+                                       </dd>
+                                       <dt>
+                                               <tt>HostnameVerifier</tt>
+                                       </dt>
+                                       <dd>
+                                               This optional parameter 
specifies the policy to apply when checking that the
+                        hostname of the server matches the names stored inside 
the X.509 certificate
+                        presented by the server. Possible values are 
<tt>Strict</tt>, <tt>AllowAll</tt>
+                        and <tt>DefaultAndLocalhost</tt>. See the
+                                               <a 
href="../apidocs/org/apache/synapse/transport/nhttp/HostnameVerifier.html">HostnameVerifier
 Javadoc</a>
+                                               for more details.
+                                       </dd>
+                               </dl>
+               </subsection>
+               </section>
+                <section name="VFS transport" id="VFS_transport">
+                       <subsection name="Transport listener" 
id="Transport_listener">
+               
+                               <p>
+                    The VFS transport listener receives messages dropped in a 
given local or remote file
+                    system location. The location is specified by a URL that 
either identifies a single
+                    file or a directory. The transport listener will 
periodically poll the specified
+                    location and process any file(s) found. After a file has 
been processed it will be
+                                       deleted or moved to another location. 
Note that this is absolutely mandatory to
+                    prevent the listener from processing files multiple times. 
Therefore the VFS transport
+                    listener can only be used in situations where it has write 
access to the file system
+                    location and where deleting or moving the dropped files is 
acceptable.
+                               </p>
+                               <p>
+                                       The transport is based on
+                                       <a class="externalLink" 
href="http://commons.apache.org/vfs/";>Apache Commons VFS</a>
+                                       and supports any protocol for which a 
VFS provider is available. The transport is
+                    pre-configured with providers for local files (
+                                       <tt>file:</tt>
+                                       scheme), HTTP, HTTPS, FTP and SFTP 
(i.e. file transfer over SSH).
+                               </p>
+                               <p>
+                    There is a fundamental difference between the VFS 
transport and transports such as
+                    HTTP and it is important to understand this difference to 
be able to use the VFS
+                    transport correctly. The HTTP transport binds to a single 
protocol endpoint, i.e.
+                    a TCP port on which it accepts incoming HTTP requests. 
These requests are then
+                    dispatched to the right service based on the request URI. 
On the other hand, the
+                    VFS transport only receives the payload of a message, but 
no additional information
+                    that could be used to dispatch the message to a service. 
This means that file system
+                    locations must be explicitly mapped to services. This is 
done using a set of service
+                    parameters.
+                               </p>
+                               <p>For Synapse this means that the VFS 
transport listener can only be used in
+                    conjunction with proxy services. The relevant service 
parameters are then specified
+                    as follows:
+                               </p>
+                               <div class="xmlConf">&lt;proxy 
name=&quot;MyVFSService&quot; transports=&quot;vfs&quot;&gt;
+    &lt;parameter 
name=&quot;transport.vfs.FileURI&quot;&gt;file:///var/spool/synapse/in&lt;/parameter&gt;
+    &lt;parameter 
name=&quot;transport.vfs.ContentType&quot;&gt;application/xml&lt;/parameter&gt;
+    ...
+    &lt;target&gt;
+           ...
+    &lt;/target&gt;
+&lt;/proxy&gt;</div>
+                               <p>
+                                       In this example the file system location
+                                       <tt>file:///var/spool/synapse/in</tt>
+                                       is explicitly bound to
+                                       <tt>MyVFSService</tt>
+                                       , i.e. any message dropped in that 
location will be predispatched to that service, bypassing any other configured
+                                       dispatch mechanisms that would apply to 
messages received through HTTP.
+                               </p>
+                               <p>The VFS transport recognizes the following 
service parameters:</p>
+                               <dl>
+                                       <dt>
+                                               
<tt>transport.vfs.FileURI</tt>(Required)
+                                       </dt>
+                                       <dd>
+                        The primary File (or Directory) URI in the vfs* 
transport format, for this
+                        service
+                    </dd>
+                                       <dt>
+                                               
<tt>transport.vfs.ContentType</tt> (Required)
+                                       </dt>
+                                       <dd>
+                                               The expected content type for 
files retrieved for this service. The VFS
+                        transport uses this information to select the 
appropriate message builder.
+                                               <p>Examples:</p>
+                                               <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>
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.vfs.FileNamePattern</tt>
+                                               (Optional)
+                                       </dt>
+                                       <dd>
+                        A file name regex pattern to match files against a 
directory specified by
+                        the FileURI
+                    </dd>
+                                       <dt>
+                                               <tt>transport.PollInterval</tt> 
(Optional)
+                                       </dt>
+                                       <dd> The poll interval (in seconds)</dd>
+                                       <dt>
+                                               
<tt>transport.vfs.ActionAfterProcess</tt> (Optional)
+                                       </dt>
+                                       <dd> DELETE or MOVE</dd>
+                                       <dt>
+                                               
<tt>transport.vfs.MoveAfterProcess</tt> (Optional)
+                                       </dt>
+                                       <dd>
+                        The directory to move files after processing (i.e. all 
files process
+                        successfully)
+                    </dd>
+                                       <dt>
+                                               
<tt>transport.vfs.ActionAfterErrors</tt> (Optional)
+                                       </dt>
+                                       <dd> DELETE or MOVE</dd>
+                                       <dt>
+                                               
<tt>transport.vfs.MoveAfterErrors</tt> (Optional)
+                                       </dt>
+                                       <dd>
+                        The directory to move files after errors (i.e. some of 
the files succeed
+                        but some fail)
+                    </dd>
+                                       <dt>
+                                               
<tt>transport.vfs.ActionAfterFailure</tt> (Optional)
+                                       </dt>
+                                       <dd> DELETE or MOVE</dd>
+                                       <dt>
+                                               
<tt>transport.vfs.MoveAfterFailure</tt> (Optional)
+                                       </dt>
+                                       <dd> The directory to move after 
failure (i.e. all files fail)</dd>
+                                       <dt>
+                                               
<tt>transport.vfs.ReplyFileURI</tt> (Optional)
+                                       </dt>
+                                       <dd> Reply file URI</dd>
+                                       <dt>
+                                               
<tt>transport.vfs.ReplyFileName</tt> (Optional)
+                                       </dt>
+                                       <dd> Reply file name (defaults to 
response.xml)</dd>
+                                       <dt>
+                                               
<tt>transport.vfs.MoveTimestampFormat</tt> (Optional)
+                                       </dt>
+                                       <dd>
+                        Timestamp prefix format for processed file name. 
java.text.SimpleDateFormat
+                        compatible string. e.g. yyMMddHHmmss'-'
+                                       </dd>
+                                       <dt>
+                                               <tt>transport.vfs.Locking</tt> 
(Optional)
+                                       </dt>
+                                       <dd>
+                                               By-default file locking is 
turned on in the VFS transport, and this parameter
+                        lets you configure the locking behaviour on a per 
service basis. Possible values are
+                                               <tt>enable</tt> or 
<tt>disable</tt>, and both these values are important because
+                        the locking can be disabled at the global level by 
specifying that at the
+                        receiver level and selectively enable locking only for 
a set of services.
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.vfs.Streaming</tt> (Optional)
+                                       </dt>
+                                       <dd>
+                                               If this parameter is set to 
<tt>true</tt>, the transport will attempt to use a
+                                               
<tt>javax.activation.DataSource</tt> (instead of a <tt>java.io.InputStream</tt>
+                                               ) object to pass the content of 
the file to the message builder. Note that this
+                        is only supported by some message builders, e.g. for 
plain text and binary.
+                                               <p>
+                            This allows processing of the message without 
storing the entire content
+                            in memory. It also has two other side effects:
+                                               </p>
+                                               <ul>
+                                                       <li>
+                                The incoming file (or connection in case of a 
remote file) will only
+                                be opened on demand.
+                            </li>
+                                                       <li>
+                                Since the data is not cached, the file might 
be read several times.
+                            </li>
+                                               </ul>
+                                               <p>
+                            This option can be used to achieve streaming of 
large payloads. Note that
+                            this feature is still somewhat experimental and 
might be superseded by a
+                            more flexible mechanism in a future release.
+                                               </p>
+                                       </dd>
+                               </dl>
+                               <p>
+                                       Note that since the VFS endpoints are 
configured at the level of the service, the
+                    only parameter that is available at the listener is the 
file locking configuration
+                    parameter which is optional and the transport listener is 
enabled in
+                                       <tt>axis2.xml</tt>
+                                       simply as follows:
+                               </p>
+                               <div class="xmlConf">&lt;transportReceiver 
name=&quot;vfs&quot; 
class=&quot;org.apache.synapse.transport.vfs.VFSTransportListener&quot;&gt;
+    &lt;parameter name=&quot;transport.vfs.Locking&quot;&gt;enable | 
disable&lt;/parameter&gt; ?
+&lt;/transportReceiver&gt;</div>
+                       </subsection>
+                       <subsection name="Transport sender" 
id="Transport_sender">
+                               <p>
+                    The VFS transport sender allows to write outgoing messages 
to local or remote files.
+                    As with the listener, the transport sender supports any 
protocol for which there
+                    is a VFS provider.
+                               </p>
+                               <p>
+                                       The sender is enabled be the following 
directive in
+                                       <tt>axis2.xml</tt> file locking which 
is by-default enabled can be configured
+                    using the <tt>transport.vfs.Locking</tt> parameter:
+                               </p>
+                               <div class="xmlConf">&lt;transportSender 
name=&quot;vfs&quot; 
class=&quot;org.apache.synapse.transport.vfs.VFSTransportSender&quot;&gt;
+    &lt;parameter name=&quot;transport.vfs.Locking&quot;&gt;enable | 
disable&lt;/parameter&gt; ?
+&lt;/transportSender&gt;</div>
+                               <p>
+                                       To send a message using the VFS 
transport, the destination URI must start with
+                                       <tt>vfs:</tt> followed by a valid VFS 
URL. For example, in a Synapse mediation,
+                    one would use:
+                               </p>
+                               <div class="xmlConf">&lt;endpoint&gt;
+    &lt;address uri=&quot;vfs:file:///var/spool/synapse/out&quot;/&gt;
+&lt;/endpoint&gt;</div>
+                               <p>
+                                       Other examples of valid VFS URLs are 
(see
+                                       <a class="externalLink" 
href="http://commons.apache.org/vfs/filesystems.html";>http://commons.apache.org/vfs/filesystems.html</a>
+                                       for more samples):
+                               </p>
+                               <ul>
+                                       <li>
+                                               
<tt>file:///directory/filename.ext</tt>
+                                       </li>
+                                       <li>
+                                               
<tt>file:////somehost/someshare/afile.txt</tt>
+                                       </li>
+                                       <li>
+                                               
<tt>jar:../lib/classes.jar!/META-INF/manifest.mf</tt>
+                                       </li>
+                                       <li>
+                                               
<tt>jar:zip:outer.zip!/nested.jar!/somedir</tt>
+                                       </li>
+                                       <li>
+                                               
<tt>ftp://myusername:mypassword@somehost/pub/downloads/somefile.tgz[?vfs.passive=true]</tt>
+                                       </li>
+                               </ul>
+                               <p>
+                                       The global configuration of the file 
locking can be overriden by providing the
+                                       <tt>transport.vfs.Locking</tt> as a URL 
parameter with the appropriate value (
+                                       <tt>enable</tt>, or <tt>disable</tt>) 
on a given endpoint.
+                               </p>
+                               <p>
+                    It should be noted that by its nature, the VFS transport 
sender doesn't support
+                    synchronous responses and should only be invoked using the 
out-only message
+                    exchange pattern. In a Synapse mediation, this can be 
forced using the
+                                       following mediator:
+                               </p>
+                               <div class="xmlConf">&lt;property 
action=&quot;set&quot; name=&quot;OUT_ONLY&quot; 
value=&quot;true&quot;/&gt;</div>
+                       </subsection>
+                       <subsection name="Using SFTP" id="Using_SFTP">
+                               <p>
+                    To avoid man-in-the-middle attacks, SSH clients will only 
connect to hosts with
+                    a known host key. When connecting for the first time to an 
SSH server, a typical
+                    command line SSH client would request confirmation from 
the user to add the
+                    server and its fingerprint to the list of known hosts.
+                               </p>
+                               <p>
+                                       The VFS transports supports SFTP 
through the
+                                       <a class="externalLink" 
href="http://www.jcraft.com/jsch/";>JSch</a>
+                                       library and this library also requires 
a list of known hosts. Since Synapse is
+                    not an interactive process, it can't request confirmation 
from the user and is
+                    therefore unable to automatically add a host to the list. 
This implies that the
+                    list of known hosts must be set up manually before the 
transport can connect.
+                               </p>
+                               <p>
+                                       Jsch loads the list of known hosts from 
a file called <tt>known_hosts</tt> in
+                    the <tt>.ssh</tt> sub-directory of the user's home 
directory, i.e. <tt>$HOME/.ssh</tt>
+                                       in Unix and <tt>%HOMEPATH%\.ssh</tt> in 
Windows. The location and format of this
+                    file are compatible with the <a class="externalLink" 
href="http://www.openssh.com/";>OpenSSH</a>
+                                       client.
+                               </p>
+                               <p>
+                                       Since the file not only contains a list 
of host names but also the fingerprints
+                    of their host keys, the easiest way to add a new host to 
that file is to simply
+                    use the OpenSSH client to open an SSH session on the 
target host. The client will
+                    then ask to add the credentials to the 
<tt>known_hosts</tt> file. Note that if
+                    the SSH server is configured to only allow SFTP sessions, 
but no interactive
+                    sessions, the connection will actually fail. Since this 
doesn't rollback the
+                    change to the <tt>known_hosts</tt> file, this error can be 
ignored.
+                               </p>
+                       </subsection>
+                       <subsection name="Known issues" id="Known_issues">
+                               <p>
+                    The VFS listener will start reading a file as soon as it 
appears in the configured
+                    location. To avoid processing half written files, the 
creation of these files should
+                    be made atomic. On most platforms this can be achieved by 
writing the data to a
+                    temporary file and then moving the file to the target 
location. Note however that
+                    a move operation is only atomic if the source and 
destination are on the same
+                    physical file system. The location for the temporary file 
should be chosen with
+                    that constraint in mind.
+                               </p>
+                               <p>
+                    It should also be noted that the VFS transport sender 
doesn't create files atomically.
+                </p>
+                       </subsection>
+               </section>
+               <section name="FIX transport" id="FIX_transport">
+                       <p>A general overview about the FIX transport can be 
found in the following articles:</p>
+                       <ul>
+                               <li>
+                                       <a class="externalLink" 
href="http://wso2.org/library/3449";>Apache Synapse FIX'ed</a>
+                               </li>
+                               <li>
+                                       <a class="externalLink" 
href="http://wso2.org/library/3837";>Using the WSO2 ESB and FIX</a>
+                                       (also applies to Synapse)
+                               </li>
+                       </ul>
+                       <subsection name="Setting up the FIX Transport" 
id="Setting_up_the_FIX_Transport">
+                               <p>
+                                       To use the FIX transport, you need a 
local
+                                       <a class="externalLink" 
href="http://www.quickfixj.org";>Quickfix/J</a>
+                                       installation. Download Quickfix/J from
+                                       <a class="externalLink" 
href="http://www.quickfixj.org/downloads";>http://www.quickfixj.org/downloads</a>
+                                       .
+                               </p>
+                               <p>
+                    To enable the FIX transport, you need to uncomment the FIX 
transport sender and
+                    FIX transport receiver configurations in the 
SYNAPSE_HOME/repository/conf/axis2.xml.
+                    Simply locate and uncomment the FIXTransportSender and 
FIXTransportListener sample
+                    configurations. Also add the following jars to the Synapse 
class path
+                                       (SYNAPSE_HOME/lib directory).
+                               </p>
+                               <ul>
+                                       <li>quickfixj-core.jar</li>
+                                       <li>quickfixj-msg-fix40.jar</li>
+                                       <li>quickfixj-msg-fix41.jar</li>
+                                       <li>quickfixj-msg-fix42.jar</li>
+                                       <li>quickfixj-msg-fix43.jar</li>
+                                       <li>quickfixj-msg-fix44.jar</li>
+                                       <li>mina-core.jar</li>
+                                       <li>slf4j-api.jar</li>
+                                       <li>slf4j-jdk14.jar</li>
+                               </ul>
+                               <p>All these jars are shipped with the 
Quickfix/J binary distribution.</p>
+                       </subsection>
+                       <subsection name="FIX Transport Parameters" 
id="FIX_Transport_Parameters">
+                               <p>
+                    This is the list of all parameters accepted by the FIX 
transport. Refer the
+                    sample 257 and 258 to see how some of them are used in 
practice.
+                               </p>
+                               <dl>
+                                       <dt>
+                                               
<tt>transport.fix.AcceptorConfigURL</tt>
+                                       </dt>
+                                       <dd>
+                        If a service needs to listen to incoming FIX messages 
from a remote initiator
+                        then Synapse needs to create an acceptor. This 
parameter should contain the
+                        URL of the file which contains the FIX configuration 
for the acceptor.
+                                               (See sample 257)
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.fix.InitiatorConfigURL</tt>
+                                       </dt>
+                                       <dd>
+                        If a service needs to send FIX messages to a remote 
acceptor Synapse should
+                        create an initiator. This parameter should contain the 
URL of the file which
+                        contains the FIX configuration for the initiator. (See 
sample 257)
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.fix.AcceptorMessageStore</tt>
+                                       </dt>
+                                       <dd>
+                        The type of message store to be used with the 
acceptor. Allowed values for
+                        this parameter are 'file', 'jdbc', 'memory' and 
'sleepycat'. If not specified
+                        memory based message store will be used by default. 
Additional parameters
+                        required to configure each of the message stores 
should be specified in the
+                        acceptor configuration file.
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.fix.InitiatorMessageStore</tt>
+                                       </dt>
+                                       <dd>
+                        Same as the above but applies only for the initiators. 
Additional parameters
+                        required to configure each of the message stores 
should be specified in the
+                        initiator configuration file.
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.fix.AcceptorLogFactory</tt>
+                                       </dt>
+                                       <dd>
+                        Specifies the transport level log factory to be used 
to log messages going
+                        through the acceptor. FIX messages are logged without 
putting them in SOAP
+                        envelopes at this level. Accepted values are 
'console', 'file' and 'jdbc'.
+                                               If not specified no logging 
will be done at the transport level. Additional
+                        parameters required to configure each of the lof 
factories should be specified
+                        in the acceptor configuration file.
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.fix.InitiatorLogFactory</tt>
+                                       </dt>
+                                       <dd>
+                        Specifies the transport level log factory to be used 
to log messages going
+                        through the initiator. Functionality is similar to the 
above. Additional
+                        parameters required to configure each of the lof 
factories should be specified
+                                               in the initiator configuration 
file.
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.fix.ResponseDeliverToCompID</tt>
+                                       </dt>
+                                       <dd>
+                        If a response FIX message sent from Synapse to a 
remote FIX engine should be
+                        forwarded from the remote engine to another party this 
parameter can be used
+                        to set the DeliverToCompID field of the messages at 
Synapse.
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.fix.ResponseDeliverToSubID</tt>
+                                       </dt>
+                                       <dd>
+                        If a response FIX message sent from Synapse to a 
remote FIX engine should be
+                        forwarded from the remote engine to another party this 
parameter can be used
+                        to set the DeliverToSubID field of the messages at 
Synapse.
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.fix.ResponseDeliverToLocationID</tt>
+                                       </dt>
+                                       <dd>
+                        If a response FIX message sent from Synapse to a 
remote FIX engine should be
+                        forwarded from the remote engine to another party this 
parameter can be used
+                        to set the DeliverToLocationID field of the messages 
at Synapse.
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.fix.ServiceName</tt>
+                                       </dt>
+                                       <dd>
+                        Used when messages coming over a different protocol 
has to be forwarded over
+                        FIX. The value must be equal to the name of the 
service and the scope must be
+                        'axis2-client' (See sample 258)
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.fix.SendAllToInSequence</tt>
+                                       </dt>
+                                       <dd>
+                        When there are multiple responses to a FIX request and 
when we need only one
+                        of them to be sent to the original requester this 
parameter has to be set to
+                        'false'. This mostly comes handy when the original 
requester is communicating
+                        over a different protocol (like HTTP). If this 
parameter is not set to 'false'
+                        at such scenarios messages might get into a loop. (See 
sample 258)
+                                       </dd>
+                                       <dt>
+                                               
<tt>transport.fix.BeginStringValidation</tt>
+                                       </dt>
+                                       <dd>
+                        When the FIX messages sent to Synapse should not be 
forwarded to a FIX session
+                        with a different BeginString value this parameter can 
be set to 'true'. Setting
+                        this parameter to 'true' will enforce this restriction.
+                                       </dd>
+                               </dl>
+                       </subsection>
+               </section>
+
+       </body>
+</document>
\ No newline at end of file

Added: 
synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/upgrading.xml
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/upgrading.xml?rev=1302321&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/upgrading.xml 
(added)
+++ 
synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/upgrading.xml 
Mon Mar 19 08:41:05 2012
@@ -0,0 +1,352 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!--
+  ~  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.
+  -->
+
+<document>
+    <properties>
+        <title>Apache Synapse - Upgrading to the Latest Version</title>
+    </properties>
+       <body>
+        <section name="Upgrading to the Latest Version">
+            <p>
+                If you are using an older version of Synapse (1.x) and now 
looking to migrate to
+                the latest versions (2.x) this document would be a good 
starting point. This
+                article provides information on steps that need to be carried 
out to smoothly
+                migrate from an older release of Synapse to the latest version.
+            </p>
+        </section>
+               <section name="Contents">
+                               <ul>
+                                       <li>
+                                               <a 
href="#General_comments">General comments</a>
+                                       </li>
+                                       <li>
+                                               <a 
href="#Upgrading_from_1.2_to_2.1">Upgrading from 1.2 to 2.1</a>
+                                               <ul>
+                                                       <li>
+                                                               <a 
href="#Configuration_file_vs_multi_XML_configuration">Configuration file vs 
multi XML configuration</a>
+                                                       </li>
+                                                       <li>
+                                                               <a 
href="#Endpoint_URLs_for_proxy_services">Endpoint URLs for proxy services</a>
+                                                       </li>
+                                                       <li>
+                                                               <a 
href="#Mediator_Deployer">Mediator Deployer</a>
+                                                       </li>
+                                                       <li>
+                                                               <a 
href="#Main_Sequence">Main Sequence</a>
+                                                       </li>
+                                                       <li>
+                                                               <a 
href="#Filter_Mediator">Filter Mediator</a>
+                                                       </li>
+                                                       <li>
+                                                               <a 
href="#Migration_Tool">Migration Tool</a>
+                                                       </li>
+                                                       <li>
+                                                               <a 
href="#Custom_Extensions_and_API_changes">Custom Extensions and API changes</a>
+                                                       </li>
+                                               </ul>
+                                       </li>
+                               </ul>
+               </section>
+               <section name="General comments" id="General_comments">
+                       <p>
+                If you are using custom extensions (mediators, startups, etc.) 
implemented in Java and
+                               depending on Synapse APIs, you should go 
through the following process before upgrading
+                               to a new release:
+                       </p>
+                       <ol type="1">
+                               <li>
+                    Compile the extension with the libraries from the Synapse 
release you are
+                                       currently using and check for any 
deprecation warnings. You should change your
+                    code to eliminate all those warnings. In general the 
Javadoc of the
+                                       deprecated class or method gives you a 
hint on how to change your code. Test all
+                    your changes with your current Synapse release.
+                               </li>
+                               <li>
+                    Recompile and test the extension with the libraries from 
the new Synapse release.
+                                       We try to avoid to introduce 
incompatible changes to Synapse's core APIs between
+                                       releases (except if the related classes 
or methods were deprecated in the previous
+                                       release). However, it is not always 
possible to maintain compatibility. In addition
+                                       your code might depend on features that 
are not part of the core API. Therefore,
+                    even if you don't use deprecated methods and classes, 
there is no guarantee that
+                    your code will not break when upgrading to a new release 
and you always need to
+                    recompile and test them before deploying to the new 
release.
+                               </li>
+                               <li>
+                    Upgrade your Synapse installation and deploy the new 
version of your extensions.
+                </li>
+                       </ol>
+                       <p>
+                If you are skipping releases when upgrading your installation, 
you might nevertheless
+                want to go through the first step for all the intermediate 
releases. This will make
+                the migration easier.
+                       </p>
+               </section>
+               
+               <section name="Upgrading from 1.2 to 2.1" 
id="Upgrading_from_1.2_to_2.1">
+                       <subsection name="Configuration file vs multi XML 
configuration" id="Configuration_file_vs_multi_XML_configuration">
+                               <p>
+                    In 1.2 you have been using a single synapse.xml file which 
resides on the
+                    repository/conf directory of the distribution, where as on 
2.1 we have structured
+                    this into a configuration repository with multiple 
directories to have different
+                    artifact types and each and every artifact configuration 
to reside on a different
+                    files inside the desired repository directory. This 
repository directory on the 2.1
+                                       release resides in the repository/conf 
directory too, and named as synapse-config.
+                                       The repository directory structure 
inside the synapse-config directory
+                                       looks like follows;
+                               </p>
+                               <div class="xmlConf">synapse-config
+  /api
+  /endpoints
+  /event-sources
+  /local-entries
+  /priority-executors
+  /proxy-services
+  /sequences
+        main.xml
+        fault.xml
+  /tasks
+  /templates
+        registry.xml
+        synapse.xml</div>
+                               <p>
+                    As you can see in the above sketch of the repository 
though it is a repository based
+                                       configuration, it also supports the old 
style single flat synapse.xml file in which
+                    case it has to reside inside the root of the repository.
+                               </p>
+                               <p>
+                                       So the easiest way to migrate the 
configuration is to move your already existing
+                    synapse.xml file in repository/conf directory in 1.2 
version into the
+                    repository/conf/synapse-config directory of the 2.x 
version. <em>Note: When doing this
+                    migration you should also delete the main.xml and 
fault.xml files which are there on the
+                    sequences directory of the repository, otherwise there 
will be 2 main and fault
+                    sequences one coming from the sequences directory and the 
other coming from your just
+                    copied synapse.xml file.</em>
+                               </p>
+                       </subsection>
+                       <subsection name="Endpoint URLs for proxy services" 
id="Endpoint_URLs_for_proxy_services">
+                               <p>
+                                       In release 2.1 the endpoint URLs for 
proxy services have changed from
+                                       <tt>/soap</tt> to <tt>/services</tt>. 
E.g. <tt>http://localhost:8280/services/StockQuote</tt>
+                                       should be used instead of 
<tt>http://localhost:8280/soap/StockQuote</tt>.
+                               </p>
+                       </subsection>
+                       <subsection name="MediatorDeployer" 
id="Mediator_Deployer">
+                               <p>
+                                       Release 1.3 has enhanced capabilities 
for extension deployment. While in 1.2 extension
+                                       deployment was limited to mediators 
bundled as simple JAR files, 1.3 extended this
+                    support to tasks and defined a new archive format (XAR) 
that allows to bundle
+                    these extensions together with their dependency JARs (see
+                                       <a class="externalLink" 
href="http://issues.apache.org/jira/browse/SYNAPSE-377";>SYNAPSE-377</a>
+                                       for more details). Enabling these 
features requires changes to the <tt>axis2.xml</tt>
+                                       configuration file. In 1.2 the deployer 
was configured as follows:
+                               </p>
+                               <div class="xmlConf">&lt;deployer 
extension=&quot;jar&quot; directory=&quot;mediators&quot;
+        
class=&quot;org.apache.synapse.core.axis2.MediatorDeployer&quot;/&gt;</div>
+                               <p>
+                    In 2.1 the suggested configuration is:
+                </p>
+                               <div class="xmlConf">&lt;deployer 
extension=&quot;xar&quot; directory=&quot;extensions&quot;
+        class=&quot;org.apache.synapse.deployers.ExtensionDeployer&quot;/&gt; 
</div>
+                               <p>
+                    It is possible to have multiple configuration entries for 
the extension deployer
+                    with different settings. For example, if you used the 
deployer in 1.2 you might
+                    want to have the following configuration:
+                               </p>
+                               <div class="xmlConf">&lt;deployer 
extension=&quot;jar&quot; directory=&quot;mediators&quot;
+        class=&quot;org.apache.synapse.deployers.ExtensionDeployer&quot;/&gt;
+&lt;deployer extension=&quot;xar&quot; directory=&quot;extensions&quot;
+           
class=&quot;org.apache.synapse.deployers.ExtensionDeployer&quot;/&gt;</div>
+                       </subsection>
+                       <subsection name="JMS transport" id="JMS_transport">
+                               <p>
+                                       The way the JMS transport determines 
the content type of incoming messages has
+                    slightly changed between Synapse 1.2 and 2.x. The 
mechanism is also more flexible.
+                    See SYNAPSE-304 and SYNAPSE-424 for the reasons of this 
change and refer to the
+                                       <a class="externalLink" 
href="http://ws.apache.org/commons/transport/";>WS-Commons Transport project</a>
+                                       for documentation.
+                               </p>
+                       </subsection>
+                       <subsection name="Main Sequence" id="Main_Sequence">
+                               <p>
+                                       On Synapse 1.2 you could have mediator 
configuration on the top level definitions
+                    tag and they were treated as the <strong>main</strong> 
sequence if there is no
+                    main sequence defined in the configuration. How ever 
removing the conflict of having
+                    top level mediators and a main sequence leading the 
synapse to fail to start on
+                    2.x Synapse configuration builder simply ignores the top 
level mediators. So you
+                    need to wrap the top level mediators, if there are any, 
with the sequence named
+                                       <strong>main</strong> on the new 2.1 
version.
+                               </p>
+                               <p>
+                                       To further explain this lets have a 
look at the following valid configuration bit
+                                       (this is the sample 0 configuration) on 
the 1.2;
+                                       <div class="xmlConf">&lt;definitions 
xmlns=&quot;http://ws.apache.org/ns/synapse&quot;&gt;
+    &lt;!-- log all attributes of messages passing through --&gt;
+    &lt;log level=&quot;full&quot;/&gt;
+
+    &lt;!-- Send the message to implicit destination --&gt;
+    &lt;send/&gt;
+&lt;/definitions&gt;</div>
+                                       which needs to be changed to the 
following configuration on 2.1
+                                       <div class="xmlConf">&lt;definitions 
xmlns=&quot;http://ws.apache.org/ns/synapse&quot;&gt;
+
+    &lt;sequence name=&quot;main&quot;&gt;
+        &lt;!-- log all attributes of messages passing through --&gt;
+        &lt;log level=&quot;full&quot;/&gt;
+
+        &lt;!-- Send the message to implicit destination --&gt;
+        &lt;send/&gt;
+    &lt;sequence/&gt;
+
+&lt;/definitions&gt;</div>
+                               </p>
+                       </subsection>
+                       <subsection name="Filter Mediator" id="Filter_Mediator">
+                               <p>
+                    From 2.1 onwards Synapse filter mediator supports the else 
close as well, and hence
+                                       the filter matching set of mediators 
has to be enclosed within a &lt;then&gt; element.
+                </p>
+                               <p>
+                                       If we consider the following sample 
from the 1.2 version of synapse;
+                                       <div class="xmlConf">&lt;filter 
source=&quot;get-property('To')&quot; regex=&quot;.*/StockQuote.*&quot;&gt;
+    &lt;send&gt;
+        &lt;endpoint&gt;
+            &lt;address 
uri=&quot;http://localhost:9000/soap/SimpleStockQuoteService&quot;/&gt;
+        &lt;/endpoint&gt;
+    &lt;/send&gt;
+    &lt;drop/&gt;
+&lt;/filter&gt;</div>
+                                       the equivalent configuration for the 
2.1 release is going to be;
+                                       <div class="xmlConf">&lt;filter 
source=&quot;get-property('To')&quot; regex=&quot;.*/StockQuote.*&quot;&gt;
+    &lt;then&gt;
+        &lt;send&gt;
+            &lt;endpoint&gt;
+                &lt;address 
uri=&quot;http://localhost:9000/soap/SimpleStockQuoteService&quot;/&gt;
+            &lt;/endpoint&gt;
+        &lt;/send&gt;
+        &lt;drop/&gt;
+    &lt;then/&gt;
+&lt;/filter&gt;</div>
+                                       You could also add an else close to 
this conditional statement as follows on 2.x
+                    which is not possible on 1.2
+                                       <div class="xmlConf">&lt;filter 
source=&quot;get-property('To')&quot; regex=&quot;.*/StockQuote.*&quot;&gt;
+    &lt;then&gt;
+        &lt;send&gt;
+            &lt;endpoint&gt;
+                &lt;address 
uri=&quot;http://localhost:9000/soap/SimpleStockQuoteService&quot;/&gt;
+            &lt;/endpoint&gt;
+        &lt;/send&gt;
+        &lt;drop/&gt;
+    &lt;then/&gt;
+    &lt;else/&gt;
+        &lt;log/&gt;
+    &lt;else/&gt;
+&lt;/filter&gt;</div>
+                               </p>
+                       </subsection>
+                       <subsection name="Migration Tool" id="Migration_Tool">
+                               <p>
+                    In general it is recommended to run the configuration 
through the migration tool
+                                       provided with the Synapse 2.x release, 
on your synapse 1.2 configuration before
+                    using it with the 2.1.
+                               </p>
+                               <p>
+                                       To run the migration tool execute the 
synapse-config-migrator.sh by passing the
+                                       synapse.xml file location of the
+                                       1.2 configuration. Which will create 
the 2.1
+                                       compatible configuration with the .new 
suffix. For example;
+                                       <pre>sh bin/synapse-config-migrator.sh 
synapse-i1.2/repository/conf/synapse.xml</pre>
+                               </p>
+                       </subsection>
+                       <subsection name="Custom Extensions and API changes" 
id="Custom_Extensions_and_API_changes">
+                               <p>
+                    Even though there is a migration tool it just takes care 
of your configuration and not
+                                       custom extensions that you have done 
for example like CustomMediators or Tasks
+                    and so forth. There are some API changes that affect your 
custom extensions
+                    unfortunately. This section tries to list all the public 
API changes which affects
+                    the backward compatibility of the custom extensions that 
you have been running
+                    with the 1.2 version of Synapse.
+                               </p>
+                               <table class="bodyTable">
+                                       <tr class="a">
+                                               <th>Class</th>
+                                               <th>Method</th>
+                                               <th>Change Description</th>
+                                       </tr>
+                                       <tr class="b">
+                                               <td>
+                                                       <a 
href="../apidocs/org/apache/synapse/config/xml/AbstractMediatorFactory.html">AbstractMediatorFactory</a>
+                                               </td>
+                                               
<td>createMediator(OMElement)</td>
+                                               <td>
+                                                       This was the method 
that you have been overwriting on the 1.2 version to
+                                                       implement a new custom 
mediator factory to build the mediator by looking at
+                                                       the XML configuration. 
On the 2.1 version you should be extending the
+                                                       <a 
href="apidocs/org/apache/synapse/config/xml/AbstractMediatorFactory.html#createSpecificMediator(org.apache.axiom.om.OMElement,%20java.util.Properties)">createSpecificMediator(OMElement,
 Properties)</a>
+                                                       . Note that in the 
process of changing the method to be extended, the method
+                                                       <a 
href="apidocs/org/apache/synapse/config/xml/AbstractMediatorFactory.html#createMediator(org.apache.axiom.om.OMElement,%20java.util.Properties)">createMediator</a>
+                                                       method has been changed 
to be final. From a users point of view of this
+                            interface he/she should be using the 
createMediator method which is what
+                            Synapse does.
+                                               </td>
+                                       </tr>
+                                       <tr class="a">
+                                               <td>
+                                                       <a 
href="../apidocs/org/apache/synapse/config/xml/AbstractMediatorSerializer.html">AbstractMediatorSerializer</a>
+                                               </td>
+                                               
<td>serializeMediator(Mediator)</td>
+                                               <td>
+                                                       This was the method 
that you have been overwriting on the 1.2 version to
+                                                       implement a new custom 
mediator serializer to serialize to the XML
+                            Configuration by walking through the mediator 
properties. On the 2.1
+                            version you should be extending the
+                                                       <a 
href="apidocs/org/apache/synapse/config/xml/AbstractMediatorSerializer.html#serializeSpecificMediator(org.apache.synapse.Mediator)">serializeSpecificMediator(Mediator)</a>
+                                                       . Note that in the 
process of changing the method to be extended, the method
+                                                       <a 
href="apidocs/org/apache/synapse/config/xml/AbstractMediatorSerializer.html#serializeMediator(org.apache.axiom.om.OMElement,%20org.apache.synapse.Mediator)">serializeMediator</a>
+                                                       method has been changed 
to be final. From a users point of view of this
+                            interface he/she should be using the 
serializeMediator method which is
+                            what Synapse does.
+                                               </td>
+                                       </tr>
+                               </table>
+                               <p>
+                                       Further to that if you have been using
+                                       <a 
href="../apidocs/org/apache/synapse/ServerManager.html">ServerManager</a>
+                                       class you may have noticed that the 
class is no more a singleton and doesn't have
+                    the static getInstance method. Also note that the common 
utilities like data
+                    sources JMX and RMI registration stuff have been moved to 
a new module with
+                    org.apache.synapse.commons package name.
+                               </p>
+                               <p>
+                                       On the configuration building front all 
entities are given a properties map to
+                    construct its instance and that has been used to pass in 
any additional information
+                    required like RESOLVE_ROOT, or SYNAPSE_HOME startup 
parameters. For example if you
+                    look at the
+                                       <a 
href="../apidocs/org/apache/synapse/config/xml/MediatorFactoryFinder.html">MediatorFactoryFinder</a>
+                                       class the
+                                       <a 
href="../apidocs/org/apache/synapse/config/xml/MediatorFactoryFinder.html#getMediator(org.apache.axiom.om.OMElement,%20java.util.Properties)">getMediator</a>
+                                       method is expecting a properties map 
apart from the OMElement argument.
+                                       It is safe to pass in a empty 
properties map if you are using these methods for
+                    any testing purposes or even in cases where you do not 
resolve dependencies.
+                               </p>
+                       </subsection>
+               </section>
+       </body>
+</document>
\ No newline at end of file


Reply via email to