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